{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Lesson-01-代码复现与参考答案"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入包\n",
    "# 用于加载波士顿房价数据集\n",
    "from sklearn.datasets import load_boston \n",
    "# pandas工具包 对于pandas陌生的同学可以参考官方10分钟上手教程：https://pandas.pydata.org/pandas-docs/stable/10min.html\n",
    "import pandas as pd \n",
    "# seaborn 用于画图\n",
    "import seaborn as sns\n",
    "import numpy as np # numpy\n",
    "# 显示画图\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = load_boston() # 加载数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "dict_keys(['data', 'target', 'feature_names', 'DESCR', 'filename'])"
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.keys() # data的里面的字段"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "         0     1     2    3      4      5     6       7    8      9    10  \\\n0  0.00632  18.0  2.31  0.0  0.538  6.575  65.2  4.0900  1.0  296.0  15.3   \n1  0.02731   0.0  7.07  0.0  0.469  6.421  78.9  4.9671  2.0  242.0  17.8   \n2  0.02729   0.0  7.07  0.0  0.469  7.185  61.1  4.9671  2.0  242.0  17.8   \n3  0.03237   0.0  2.18  0.0  0.458  6.998  45.8  6.0622  3.0  222.0  18.7   \n4  0.06905   0.0  2.18  0.0  0.458  7.147  54.2  6.0622  3.0  222.0  18.7   \n\n       11    12  \n0  396.90  4.98  \n1  396.90  9.14  \n2  392.83  4.03  \n3  394.63  2.94  \n4  396.90  5.33  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>0</th>\n      <th>1</th>\n      <th>2</th>\n      <th>3</th>\n      <th>4</th>\n      <th>5</th>\n      <th>6</th>\n      <th>7</th>\n      <th>8</th>\n      <th>9</th>\n      <th>10</th>\n      <th>11</th>\n      <th>12</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0.00632</td>\n      <td>18.0</td>\n      <td>2.31</td>\n      <td>0.0</td>\n      <td>0.538</td>\n      <td>6.575</td>\n      <td>65.2</td>\n      <td>4.0900</td>\n      <td>1.0</td>\n      <td>296.0</td>\n      <td>15.3</td>\n      <td>396.90</td>\n      <td>4.98</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>0.02731</td>\n      <td>0.0</td>\n      <td>7.07</td>\n      <td>0.0</td>\n      <td>0.469</td>\n      <td>6.421</td>\n      <td>78.9</td>\n      <td>4.9671</td>\n      <td>2.0</td>\n      <td>242.0</td>\n      <td>17.8</td>\n      <td>396.90</td>\n      <td>9.14</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>0.02729</td>\n      <td>0.0</td>\n      <td>7.07</td>\n      <td>0.0</td>\n      <td>0.469</td>\n      <td>7.185</td>\n      <td>61.1</td>\n      <td>4.9671</td>\n      <td>2.0</td>\n      <td>242.0</td>\n      <td>17.8</td>\n      <td>392.83</td>\n      <td>4.03</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>0.03237</td>\n      <td>0.0</td>\n      <td>2.18</td>\n      <td>0.0</td>\n      <td>0.458</td>\n      <td>6.998</td>\n      <td>45.8</td>\n      <td>6.0622</td>\n      <td>3.0</td>\n      <td>222.0</td>\n      <td>18.7</td>\n      <td>394.63</td>\n      <td>2.94</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>0.06905</td>\n      <td>0.0</td>\n      <td>2.18</td>\n      <td>0.0</td>\n      <td>0.458</td>\n      <td>7.147</td>\n      <td>54.2</td>\n      <td>6.0622</td>\n      <td>3.0</td>\n      <td>222.0</td>\n      <td>18.7</td>\n      <td>396.90</td>\n      <td>5.33</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataframe = pd.DataFrame(data['data'])\n",
    "dataframe.head(5) # 查看dataframe的前5行，我们可以看到列名是数字"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',\n       'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7')"
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data['feature_names'] # 特征名称"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "表 ：波士顿房价数据集缩写特征的中文描述\n",
    "```\n",
    "名称\t中文描述\n",
    "CRIM\t住房所在城镇的人均犯罪率\n",
    "ZN\t住房用地超过 25000 平方尺的比例\n",
    "INDUS\t住房所在城镇非零售商用土地的比例\n",
    "CHAS\t有关查理斯河的虚拟变量（如果住房位于河边则为1,否则为0 ）\n",
    "NOX\t一氧化氮浓度\n",
    "RM\t每处住房的平均房间数\n",
    "AGE\t建于 1940 年之前的业主自住房比例\n",
    "DIS\t住房距离波士顿五大中心区域的加权距离\n",
    "RAD\t离住房最近的公路入口编号\n",
    "TAX 每 10000 美元的全额财产税金额\n",
    "PTRATIO\t\n",
    "住房所在城镇的师生比例\n",
    "B\t1000(Bk-0.63)^2,其中 Bk 指代城镇中黑人的比例\n",
    "LSTAT\t弱势群体人口所占比例\n",
    "MEDV\t业主自住房的中位数房价（以千美元计）\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "      CRIM    ZN  INDUS  CHAS    NOX     RM   AGE     DIS  RAD    TAX  \\\n0  0.00632  18.0   2.31   0.0  0.538  6.575  65.2  4.0900  1.0  296.0   \n1  0.02731   0.0   7.07   0.0  0.469  6.421  78.9  4.9671  2.0  242.0   \n2  0.02729   0.0   7.07   0.0  0.469  7.185  61.1  4.9671  2.0  242.0   \n3  0.03237   0.0   2.18   0.0  0.458  6.998  45.8  6.0622  3.0  222.0   \n4  0.06905   0.0   2.18   0.0  0.458  7.147  54.2  6.0622  3.0  222.0   \n\n   PTRATIO       B  LSTAT  \n0     15.3  396.90   4.98  \n1     17.8  396.90   9.14  \n2     17.8  392.83   4.03  \n3     18.7  394.63   2.94  \n4     18.7  396.90   5.33  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>CRIM</th>\n      <th>ZN</th>\n      <th>INDUS</th>\n      <th>CHAS</th>\n      <th>NOX</th>\n      <th>RM</th>\n      <th>AGE</th>\n      <th>DIS</th>\n      <th>RAD</th>\n      <th>TAX</th>\n      <th>PTRATIO</th>\n      <th>B</th>\n      <th>LSTAT</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0.00632</td>\n      <td>18.0</td>\n      <td>2.31</td>\n      <td>0.0</td>\n      <td>0.538</td>\n      <td>6.575</td>\n      <td>65.2</td>\n      <td>4.0900</td>\n      <td>1.0</td>\n      <td>296.0</td>\n      <td>15.3</td>\n      <td>396.90</td>\n      <td>4.98</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>0.02731</td>\n      <td>0.0</td>\n      <td>7.07</td>\n      <td>0.0</td>\n      <td>0.469</td>\n      <td>6.421</td>\n      <td>78.9</td>\n      <td>4.9671</td>\n      <td>2.0</td>\n      <td>242.0</td>\n      <td>17.8</td>\n      <td>396.90</td>\n      <td>9.14</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>0.02729</td>\n      <td>0.0</td>\n      <td>7.07</td>\n      <td>0.0</td>\n      <td>0.469</td>\n      <td>7.185</td>\n      <td>61.1</td>\n      <td>4.9671</td>\n      <td>2.0</td>\n      <td>242.0</td>\n      <td>17.8</td>\n      <td>392.83</td>\n      <td>4.03</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>0.03237</td>\n      <td>0.0</td>\n      <td>2.18</td>\n      <td>0.0</td>\n      <td>0.458</td>\n      <td>6.998</td>\n      <td>45.8</td>\n      <td>6.0622</td>\n      <td>3.0</td>\n      <td>222.0</td>\n      <td>18.7</td>\n      <td>394.63</td>\n      <td>2.94</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>0.06905</td>\n      <td>0.0</td>\n      <td>2.18</td>\n      <td>0.0</td>\n      <td>0.458</td>\n      <td>7.147</td>\n      <td>54.2</td>\n      <td>6.0622</td>\n      <td>3.0</td>\n      <td>222.0</td>\n      <td>18.7</td>\n      <td>396.90</td>\n      <td>5.33</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataframe.columns = data['feature_names'] # 将数字列名替换为特征的名字\n",
    "dataframe.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "      CRIM    ZN  INDUS  CHAS    NOX     RM   AGE     DIS  RAD    TAX  \\\n0  0.00632  18.0   2.31   0.0  0.538  6.575  65.2  4.0900  1.0  296.0   \n1  0.02731   0.0   7.07   0.0  0.469  6.421  78.9  4.9671  2.0  242.0   \n\n   PTRATIO      B  LSTAT  price  \n0     15.3  396.9   4.98   24.0  \n1     17.8  396.9   9.14   21.6  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>CRIM</th>\n      <th>ZN</th>\n      <th>INDUS</th>\n      <th>CHAS</th>\n      <th>NOX</th>\n      <th>RM</th>\n      <th>AGE</th>\n      <th>DIS</th>\n      <th>RAD</th>\n      <th>TAX</th>\n      <th>PTRATIO</th>\n      <th>B</th>\n      <th>LSTAT</th>\n      <th>price</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0.00632</td>\n      <td>18.0</td>\n      <td>2.31</td>\n      <td>0.0</td>\n      <td>0.538</td>\n      <td>6.575</td>\n      <td>65.2</td>\n      <td>4.0900</td>\n      <td>1.0</td>\n      <td>296.0</td>\n      <td>15.3</td>\n      <td>396.9</td>\n      <td>4.98</td>\n      <td>24.0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>0.02731</td>\n      <td>0.0</td>\n      <td>7.07</td>\n      <td>0.0</td>\n      <td>0.469</td>\n      <td>6.421</td>\n      <td>78.9</td>\n      <td>4.9671</td>\n      <td>2.0</td>\n      <td>242.0</td>\n      <td>17.8</td>\n      <td>396.9</td>\n      <td>9.14</td>\n      <td>21.6</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataframe['price'] = data['target'] # target为房价，也是我们的目标值，我们将目标值赋值给dataframe\n",
    "dataframe.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "<matplotlib.axes._subplots.AxesSubplot at 0x22a80604eb0>"
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 2 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.heatmap(dataframe.corr(), annot=True, fmt='.1f') # 查看特征与price的相关性系数，正相关和负相关"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "<matplotlib.collections.PathCollection at 0x22a80d13c40>"
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXEAAAD4CAYAAAAaT9YAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO2df5Ac5Znfv8+O2mgWnxnJXjtiLHk5xyXOWJbWbAyxqlwnOFv2YYsNtpApO0WlXCF/uBJDUXteUuSQrkisy8Yx90cqVZSdHCl8ROKH18JKDFfA5SqkIFmxknUKqK58FsKDArKlxbZ2EbO7T/6Y6dX86Lf77Z7u6R/z/VRtze7MdPfbPTvP+/TzfN/nEVUFIYSQfDKU9gAIIYREh0acEEJyDI04IYTkGBpxQgjJMTTihBCSY9b082Dve9/7dHR0tJ+HJISQ3HPkyJFfquqI12t9NeKjo6OYnZ3t5yEJIST3iMirptcYTiGEkBxDI04IITmGRpwQQnIMjTghhOQYGnFCCMkxVuoUETkF4DcAlgEsqeq4iKwHcADAKIBTAG5V1fPJDJP0ysxcDdNPncTr84u4slLG5M7NmBirpj2snoj7nPp5jTj2S/upzS+iJIJlVVTKDkSA+YU6ys4QFpdWoAqURHDbdRtx/8SWno7vtS2A2K7dzFwN+548gfMLdQBApexg765rEv2uiU0Vw6YRH1fVX7Y8928BnFPV/SIyBWCdqn7Lbz/j4+NKiWH/mZmr4Z4njmOxvrz6XNkp4du3bMmtIY/7nPp5jTh27/3YsP3D6/HS6bciHd/rmE5JAAXqK5fsYNRrNzNXw+Rjx1BfbrepzpBgevfWnj4LETmiquNer/USTrkZwEPN3x8CMNHDvkiCTD91suvLslhfxvRTJ1MaUe/EfU79vEYcu/d+bHj+Z+ciH9/rmPVlbTPgYfbntf9OAw40Jogkv2u2RlwBPC0iR0TkjuZzH1DVMwDQfHy/14YicoeIzIrI7NmzZ3sfMQnN6/OLoZ7PA3GfUz+vEcce/9hs9hfmmFHG57dNkt81WyO+XVU/AeDzAL4hIp+2PYCqPqiq46o6PjLiuWqUJMyVlXKo5/NA3OfUz2vEscc/Npv9hTlmlPH5bZPkd83KiKvq683HNwH8EMAnAbwhIhsAoPn4ZlKDJL0xuXMzyk6p7bmyU1pN6uSRuM+pn9eIY/fejw3bP7w+8vG9jumUBM6QRNqf1/6dknQ97wxJot+1QHWKiFwOYEhVf9P8/bMA/gTAIQC3A9jffPxRYqMkPeEmVIqkTon7nPp5jTj29v30S51iGjsA7D10AvOLDUXJWidaqtDdf+bUKSLyu2h430DD6P+Fqv5rEXkvgIMANgE4DWC3qp7z2xfVKYQQL9KUwOZBveWnTgn0xFX17wBs9Xj+VwBu7H14hJBBptOI1uYXcc8TxwEgFiMaNEH4KW6yYsT94IpNQkiqJCmRdCeI2vwiFJcmiJm52up78q7eohEnhKRKkkbUZoLIu3qLRpwQkipJGlGbCSLv6i0acUJIqiRpRG0miImxKr59yxZUK2UIgGqlnKmkZhB9bc9GCCGdJCmRnNy52VN50jlBTIxVc2O0O6ERJ4SkTlJGtIhrJDqhESeEJEraZZDz7GXbQCNOCEmMpDXghIlNQkiCFLEMctagJ04IiZ3Wrj1e5GUhTR6gESeExIpN1568LKTJAzTihJBYCera0ynxSzvxmXdoxAkhseIXKql2GGkmPnuHiU1CSKyYQiXVShnPT91gXUGQ2EEjTgiJlTDL6PtZQXBmrobt+5/FVVOHsX3/s22VDPMMwymEkFgJs0ryykrZU8ESd+KzyGEbGnFCSOzYrpK0rW3SK3lv/OAHjTghJDX6Vdsk740f/KARJ4RYkWcpYL/CNmnAxCYhJBCbNmdZ2m8neW/84AeNOCEkEFNMee+hE4nsN26JYd4bP/jBcAohJBBT7Hh+sY6ZuVpkY9jPWHVRS9LSEyeEBOIXO77zwNHIuuu8NynOAjTihJBAgmLHUWPZ/YpVF3WhD0AjTgixYGKsinXDju97osSy+xGr7lfyNC1EVft2sPHxcZ2dne3b8Qgh8WFTYhZoGOIsyRC373/WU17o1nLJAyJyRFXHvV5jYpMQYkXrwhxTswcBVl/LytL2Ii/0ARhOIYSEYGKsiuenbsADe7Z1xbIFQOd9fRYqEhY9eUojTggJjVcs2xSYTdvjNSVPd1w9UohkJ8MphOSMrCx/79Rdm2LPaXu8XvVZdlw9gseP1ApR1ZBGnJAckeWSqv2qSBgFrwmnKFUNGU4hJEdkuRNOnpa2FynZSU+ckByRdeOTl6XtRapqSE+ckBxRdKVFvyhSVUMacUJyRJGMT5rkKfQThHU4RURKAGYB1FT1CyKyHsABAKMATgG4VVXPJzFIQkiDfnXCGQTyEvoJIkxM/JsAXgbwnubfUwCeUdX9IjLV/PtbMY+PENJB3o1PViSSRcEqnCIiHwRwE4DvtTx9M4CHmr8/BGAi3qERQopG0YtRpYFtTPwBAH8EYKXluQ+o6hkAaD6+32tDEblDRGZFZPbs2bM9DZYQkm+yLJHMK4FGXES+AOBNVT0S5QCq+qCqjqvq+MjISJRdEEIKQtYlknnEJia+HcAuEflDAGsBvEdEHgbwhohsUNUzIrIBwJtJDpQQkn+KpM/OCoGeuKreo6ofVNVRAF8B8Kyqfg3AIQC3N992O4AfJTZKQkghiFMiWeRuPWHoZcXmfgAHReTrAE4D2B3PkAghRSUuiWSWa8j0G3b2IYTkjiJ06wkDO/sQMuAUTZvNBOkluOyekIJTRG02a8hcgkackIJTNG32zFwNC+8sdT0/qDVkGE4hJMfYhElMTY3zGHroTGi6VMoO9u66JtchoqjQiBOSQ2bmatj35AmcX6ivPuel0JiZq3k2MAbyGXrwuqsAgMsvWzOQBhxgOIWQ3OF6o60G3KUzTDL91ElPAy5ALkMPTGh2QyNOSM4weaMurQbNZNwU+dRTM6HZDY04ITkjyOtsNWh+xm00hysd2RSjGxpxMrDkddm2n2HuNGiTOzfDKYnx/bX5Rdx14CjunTke6xiTokgdeeKCiU0ykOR52fbkzs3hFBoBi7IVwA9eOI3xD60HkP2uQXlvihE3NOJkIPHTTmfdQISpPzL91EnUV4JLayiAfU+ewNv1lVxObIMMwylkIMm7ymFirIrJnZtxZaWM1+cXMf3USc9wUJjzOb9QL9SioEGBnjgZSPJe19o2HGQ6zzD0OrEVrW5L1qAnTgaSrKscgpKutkvpvc4zLL1MbEWs25I1aMTJQJJllYON4TN5x7X5xTaj33mew84QxCxW6aLXia1odVuyCMMpZGDJqsrBJulaGXY8V2wC3aEV9+femeN4+IXTvseW5r7nF+qxhD7ynnvIAzTihGQMG8MX1MvFS2nzyIuvBR5bAbxdX8F392yLZYLLe+4hDzCcQkjGsFla/taitxfeSudksGzZxSvOcEfWcw9FgEackIxhY/hsPNnO95RCBMPjCndkOfdQFBhOISRj2CzmMa3adPHydm+7bmNgTNwlznBHVnMPRYFGnJAMEmT4Wg19bX4RIpfi5OuGHdz3xe7l9/dPbMEPX6rhwjvmCohA9wRAnXe2oREnJKMEGc+JsSpmXz2HH7xwui3R+XZ9xbjPhQADLgC+dO2lCWRmrobJx46hvtw4QG1+EZOPHVs9PkkfGnFCMojNisyZuVrDgHds25qYdD31kgiWVVcfTSiAA//7NYx/aD0mxqrY9+SJVQPuUl9W7HvyBI14RmBik5AMYrNIxtS1B7hk9F15n2u4bRQq9RVdPY5Ji256nvQfeuKEJEQvsWQbrbifgqQk4tv9x9R302bfJFvQiBOSAFHqlbca/SFD2KOza4/XQhpBsMcd5I+7x6mUHcx7aNIrZSdgD6RfMJxCSAKErRnSWS/FywgLgB1Xj6z+7aUnFwCf+vB6hCiP0oUzJKvqlL27roEzJF2v7911TQ9HIHFCI05IAoStGRLU/BhoeM+PH6kZi1tVK2V8d882nPrVoq+nXXZKWDfs7UmLANO7t67eLUyMVTG9e2vbMVpfJ+nDcAohCRC2ZohtDLqzJoqXnvyuA0d997HWGcJNH9+Ax4/U2iaOslPiasocQiNOSAJM7tyMyUePtbVGaw1TdBKmeYNNt3u/fZ1fqOPxIzV86doqnnvlrGfi1Y3P1+YX25KgbNmWPWjECUmKzsC0T6B6cudm3HXgaGDCEQCuCEgqBi3JBxoe/XOvnMXzUzd0vdaZlDXp0GnEswFj4oQkwPRTJz0XyZgSmxNjVXz1+k1W+77wzpJvZ5zOWLkJL49+Zq6Guw8eC4zPU4KYHWjECUkAv847JgN8/8QWY8KxFa/JoLOdGwA8P3UDfr7/JlQtStu6+7jnieNWC4JYDzw70IgTkgB+Rs6rx6RrhG1XQrZOEkHt3GxretsoZEzbkvSgESckAfwaFHfqxVuNsC2tk4RJk77vyRPYvv9Z3HXgKC5bM4R1w45vTW+/EIkblmE98OwRmNgUkbUA/hrAZc33P6aq94nIegAHAIwCOAXgVlU9n9xQCckPrpG70yD3azXYew+dsPKAXTo9YZPxPb9QX/Xs5xfrKDsl37ZrJlVLSQTfuZXa8Kxi44lfBHCDqm4FsA3A50TkegBTAJ5R1Y8AeKb5NyGkBVM3HUHDA5+Zq3kua299Xyef2HRFmxRwyLJjT1DbNVPYhQY82wR64qqqAH7b/NNp/iiAmwH8fvP5hwD8FYBvxT5CQhIiyWYHQUlCBQL7WJrKxv6vn53DvTPH8eNjZ3wnAC/8QiY2HYVI9hC1yESLSAnAEQB/H8B/UNVvici8qlZa3nNeVdd5bHsHgDsAYNOmTde++uqrsQ2ekKh0aqGBeFcsjv3J04FJStd/tmtf3L2tabuSCH5n7RpPA1+tlD214STbiMgRVR33es0qsamqy6q6DcAHAXxSRD5me3BVfVBVx1V1fGRkJHgDQvpA2AJVNrgKk9Gpw1YqkysrZaOKZd2wY5QGAv6Gf1kVIugqXEVVSTEJpU5R1Xk0wiafA/CGiGwAgObjm7GPjpCECFugKogoCpMdV4+0VSVs5aaPb8Dkzs2RqxGeX6gD0igZyy7zxcZGnTICoK6q8yJSBvAHAP4UwCEAtwPY33z8UZIDJSROwhao8sKm/rcffp3nn3vlLO6f2HKph2bLa0ENHVzqy4rfvL3kq0gh+cfGE98A4DkR+SmA/wPgL1X1x2gY78+IyN8C+Ezzb0Jyge0CGBM29b97wb0juH9iC756/aZVlUtJBJ/68HqjBr2TZVXPxUWkONioU34KYMzj+V8BuDGJQRGSNFGVGK3V/ZLEvSO4d+Z4mye+rIqXTr/VVYFw4Z0lYxyeBauKDasYklRJUuYXhFctbj+8FC1+uGEPESCMo+6UGiVr/brZd1YgDBobC1YVFy67J6kRVPMja9jUFimJtHfZ2X9TeA2hXjqeadNOo+xWLjQtLmLBquKSeU88TU+NJIufzC+Ln3GQN2vSmYdp+AAA9RVd/Z83UfGoduge10v/Tmlhccm0J543T42EI26ZX9L4ebN+Er4oBrQ2v+jb/OG3b3vXFPfqu0lpYbHJtCeeN0+NhCMOmV+veN3pAd4JT6+OOSbvu3O/ZWcIi/UV63GVROBXEsX11r2+B2Fj/STfZNqI581TI+EwGcV+3fp3JgNr84uYfPQYIFjtyuPVUzIovOe1X6ckcIakredm2SkZY+zLqpgPWPXJ7wEBMm7Es+CpkeRIu+CS151eq5F1ab37s/FyPfe7rLj8XSWs1FewrIqSyKpM0BQvD1K1KIDRqcOolB3s3XUNve8BJdMx8V4XZJBsk3bSOowna/Net3aKyShfeGd5dVHQsioeP1LDjqtHjAt3POYTT+YX65h89BhzRQNKpo04kzTFJQtJ6zB3dEHvjVI7ZbG+jB8fO4O1jv/XsHW1pgk3Rk4Gj0yHUwAmaYpKFpLWXjF5Z0jaYuKA3d2fbX/KTmzqga+oNvTmAK6aOmytHSeDQeaNOCkmWUham2LyXs8FTSx+465WyrhwcSl0AweX1rsAP805c0WDCY04SYWsJK1Nd3ph7wZM5+M2YQi7ZN/FXYLvMrlzMyYfO9Z2pwA07iCYKxpMaMRJKqQtL3TpTK7uuHqkrbCUbbI16Hy8vH6/olVAozHEfV9sV524v+978sTqtlSnDDY04iQV0pIXthrtyrCD3769tCorrM0vttX49tKIt+6n05B+6doqDv/0zOpzl63xT1je9PENePxIrc3wu0Wzqj7Xwy9PlLbih/Qfqx6bcTE+Pq6zs7N9Ox4ZPPyMWNSQRkkEK6qr+5t99ZyxocMQgNZ1ma5RXtcxYQANT71VK97Z7MFdDQrYTXZJ9w0l6eHXY5NGnBSCTs/YpdWI+Wm408KNmZvGVik7uLi0YmWYTftgc+T842fEGU4hucfPw16sL2PvoROYffVc5gw4gNUxmdQtXooWkxQzC4of0n8yvdiHEBuCNNrzi3XffpZp4i7gCavK8TLMpn1Qelhs6ImT3NKvVmlJsqyKq6YOozLseBbIWusMeSpYrqyUPZU1nYlSlqkoPjTiJFb6pY6ImqTMIgp0GWpXNgh4N3nYcfVIV6XEh184jbIzhHXDDuYX6lSnDAg04iQ2vEqwmiR6vRJ1mXteuLjU0LiYpJim82/ULBd8d882Gu8BYWCMOPWzyWNbD8X0WYT5jIqerAsqf3vXgaNW25LiMxBGvJ8e4iBjo44wfRazr55ri+cGfUZh+1bmEb+JKuj8iz7JkUsMhDrFz0Mk8WGjjjB9Fo+8+Fqoz2jH1SM9jjb7+KlKvGrt225LisVAeOLUz/YHm3ooJu9x2bDozP2MZuZq2HvoRORKgHkjSFXiVUPFdltSLAbCE6d+tj/YNPHwa2zghSulm3z02MAY8JKI1VL5ibEq5v74s3hgzzY2ThlgBmLZPWtKZIfRqcPG1zobB7ufUd614FGoVso9JX5JsRj4ZfdpN+TNAlkxAFWfutuudK42v4iSyGpMfNAMuOBS2Clq4pdkh6S/ewPhiQ86WboTCRpLFhbxVMoO6ssruPBOb2N4YM823H3wmDHe75QEULSt0uysZOhSEvHcD4tbZZu4vnt+nvhAxMQHnSypc4Li5llYxDO/WO/ZgAONczUZcACY/vJWTO/e2nYtTO8OSvySbNKP795AhFMGnaypc/yaGhTFKK0bdgD4h4/ca9B6LUzlZE2eOJPz2aYf3z164gNAntQ5WRxTWJyS4L4vNuqeeOm53don2/c/i6umDmP7/mcxM1fzff9t1230fJ5SwmzTj+8ePfEBIOl+lnEkblorEpriwnmgJILpL2/t8rL9qg16JSm9ruf4h9ZnIjlN7OlHL1kmNgeEpDLkcSRuvPbR2muys3lxVtUqtufNDjyDRRzfvYGXGBL/OHQvBCVubP55vfbhGnDXqLV+EbKAG6N2H12JJNAw0n7nnLUcBUmWpL57LoFGXEQ2AvgvAP4eGj1gH1TVPxOR9QAOABgFcArArap6PrGRkkxi8ordEIGNrtlkvGrzixidOowhAVYyFl/5zq1bu87DttCa6W6iCPkA0n9sEptLAO5W1d8DcD2Ab4jIRwFMAXhGVT8C4Jnm32SAmJmrwW8Rva20Ksh4Zc2AV8qOpwG/++Axq3M2JS+ZpCRRCDTiqnpGVV9q/v4bAC8DqAK4GcBDzbc9BGAiqUGSbDL91MnQCUgvrzuoIl/WuObK32n72/XAbbXcNjVmCLElVExcREYBjAF4EcAHVPUM0DD0IvJ+wzZ3ALgDADZt2tTLWEnGiBLDbfW6W+PcV5QdYz/JrPH8z87h3pnjuH9iC4DgBUpedxpJx0nJ4GCtExeRdwN4HMCdqvpr2+1U9UFVHVfV8ZGR4teAHiTCxnBbQwau91qbX4SisUrytxeXcrNw4ZEXX1v93U8twzAJSRqr74yIOGgY8B+o6hPNp98QkQ3N1zcAeDOZIZKsEiYMYrO8vr6sWIl9lMnghk788gK2JWUJ6QUbdYoA+D6Al1X137e8dAjA7QD2Nx9/lMgISWZpNchB2u1O/XPe5XRDYtZ7Aw2du5eChZC4sYmJbwfwjwEcFxG3O+u/RMN4HxSRrwM4DWB3MkMkWaY1tvvRf/XfsVDv9qXdOiKtZHnRjhXqH0bJmKCGFBgbdcr/VFVR1Y+r6rbmz39T1V+p6o2q+pHm47l+DJhkl39zy8cb5VVbaK0j0koWe2SWhsyCyc5XbMI+9zxxfLUmCiFJwRWbGSUrTRzCEKb5xnOvnO338HwZdoY87yJ6wdWIZ/1zI/mGRjyD2K7868c4wk4kttK5rMXEgwx41PBI1s4zLHl0JgaNvCi6BoosNHHolAC6E0kc4YGZuRqGQjZMzit5Xkqf5P8AiQ8a8QyShQJJSU0kQasbs0jU6cakEZ+Zq3nWEs8aWXAmSDA04hkkC00ckppIorZfc4ZkVeXik38MJMqmX71+U+iyAKal9HnybrPgTJBgaMQzSBYKJCU1kUQxAAJgzyc34r4vXoNqpdxTQSxFo4CVLdVKGfdPbMG3b9mCkmUIyClJqLK7WfVus+BMkGBoxDNIFgokJTWRRDEACuDHx86serD9ovV8J8aq+M6tW6088vqy4q6DR7Ft39NdIZM8ebdZcCZIMFSnZJQ0CyS5ioTF+nJX04Nex+TVrsqG+cX4CmP57ataKRuVGO7vdx44atp8FdVLx2lVF5kWOQ2JYGaulinlRxjJKEkPGvEBwkYu1ilvXFZd9b7i+PKGWaofBbet27phJ3RFRK/2aF7XzNR53g83ZGKaxJZVU5GRBsFqi9mH4ZQBwTah1o+Y7cRYFc9P3YBT+2+y3uayNcH/qtVKGV+9fhOqlTLmAwy4TZjAdM2iKmten19cDZV5xdezGhsn2YZGfECwNc5xxmxtpHS2ScaLS+bFONVKGQ/s2YYLF5fw8AunV42uiUrZwbdv2dJ27LVO91fBdM1sE5yduPmAibEqViwbSBASBI34gGBrnONSJNh4/vfOHO851l12Sthx9QjuecJuX86QYO+uRi2X1onh/EK9a3ymaxbFE+/09Kn8IHFBIz4gmIyDm1BziUuREOT5z8zV8IMXTofap0tJpE2189wrZwMTpe77p3c3ysPa3JmYrlm1UvaszGiiU100M1fDhYtLXe+j8oNEgYnNAcE2oRaXIsGUtHSfj9Kf02VFFT9viaffFaAW8UpYBo0PaFyzyUePod4hTH+9eXfhJlHDHLszcewyJO2TSBrJRNZJySc04gOC+2W8++CxrnBAZ7W9OBQJJgWHG0/uJfZ7RUcc3a82uRtu2b7/WSuFSVe82yP8rS2PQYa88zxNK1bdeSLNYmdZKLpGwsNwSsFpTS5OP3XSuiN7r5iO4z7fS+z3rbfrbclSU5u4dcMOvnRtFY8fqbXF5u88cNR3fG54afqpk6gv+/vaioa3XbWMcdtc5zRUKnlaSUraoREvMF7JRZOuIo6EWuuEYVJwuMYuTH/OTlTRliwF0LXC9YE92zD3x5+1ipd34iY4bSe22vyi57X1inHbXud+q1TytJKUtMNwSoHx8q5MfmWvnXa8Fgl10rmMHQD2PXmia1GOTazZxfUWn5+6wXPhUpQFRe4+w7aQaw2vlEQ8Y9y2K1avrJT7GqM2nSvVMtmHnrgleSkf2koYA9Rrp52g6oSm+i+/XuxWabjG0BYvb9GdVKJSm1+MdLfgjt2dxLykla0Ll4adoa6Wdq2yyX5VO2SdlPxCI25BnsqHuszM1Xo2hGHw275z2f7MXA3b9j3tG5t2Y83ApWSjKUTT6S3OzNVw98FjkUreduKGacLQeUauR+7+H7Xq2RWCPf9gY1exM68wUJIx6iwUXSPREO1jcf7x8XGdnZ3t2/HiYvv+Zz29Wi/pWlYwjdlEr+cSdDx3/yaJnc14TNuuG3ZWmzHvPXQitmJZrWPwOnaYsI+goarxGptbXMwNnVR86r4I0CavJIOBiBxR1XGv1xgTtyCPSZ8gz7jVGIW5bTbFaU2a6s7x2DSFcEqCCxeXcNXU4bZjuF5hp6E+v1DH5KPHsAJguZdi44YxA92Fu1yJoq0h9zPM7p2de138CncxRk06YTjFgjwukfZbbRj1ttkvrDQxVsW715p9Anc8QROfNK3i/GLdM3Q1MVbF5Zd1H6e+orEa8NYxu7iTVdkprYaBbI5Ydkrwu+F1k6A2+2GMmnRCI25BHpM+fmN2qwj+fP9NnqoOE0FaYr/Kge61Cpr4BOjy5hfry9j35InVv6PcAYUtWmX6fMO2l3Mnybd8Qjy2tVgYoyZe0IhbkMekTxJjDgormQx0pey0Sez8FB8mZ/r8Qn3VG49yB3TbdRutDblIo6rhXQeOdimRwkwgAqxOkqYxrxt2rBKn1Uo50/9vJD0YE7ckj8Xx4x5zkJbYSwNddkrYu+uatlh6ZdjBZWuG8NZiHUMhGiy4pQGidAd67pWzuO26jXg4oOiWUxJAL8WlO5efh9GOtxpu07VxE7J+55P1uz6SLvTEiTUmL3rhnaXVuLiX9w+gLZZ+fqGOi0sr+O6ebca62l64XrB7nDC8Pr+I+ye24GvXb2qTLG7/8Pq28V7+rjWe4Rw3ZDS5c7OVdLPT8PrdGXW+tm7YQaXs5Oauj6QLJYaW5K3CW1LjnZmrecr4yk7JaGz85IdhWp11yg6jyCj9rsPMXM3YP7NV2jc6ddj3OJWyg727rsn0/wfJF34SQ3riFuRtsU+S4zWpQ9zko9eqVr84spcBd0oCZ6h7FWNnSMHrzsAZkq4VkC5+1yFohWdraCQotu7XhYiQuKERtyBvFd6SHq/JKJ9fqHtOHDaJyNZGD9Nf3orp3VsDk7JeIYrp3Vsx/eWtxmSh6Tr4qU46J5CgO4cs/2+Q4sHEpgV5W+yT9Hhtk3utHd4nHzvmW9a1s9EDYFfH2pS8nRir4qqpw546bq/r4HdtOieQqsX5Z/V/gxQPeuIW5G2xT9LjDVMYyu3wfvm7/P2FKD08gwqShbkOw+/yPh8vaZ/N+VeGndwVTCP5hEbcgkBxppYAAAjDSURBVLwt9kl6vF5hDFPXetdg+i12CTs225i/7XW4d+Y4LrzTHUopDYnnuFrPH+iuuOiUBL99eyk3ORSSbxhOsSCuvpNRiKIySWO8X9i6AY8fqRlrsphCMCWRUBI6t0JhUIs5wP46PPLia57HWllR47hawzidn9GFi0td6h2v8fVK3hRTJBkoMcwwXpXz/KR8rdsl+eU2jetL11bx3CtnPY8b9VyCjttK1Ap/fpLBUxH2Z4rFx1mBMI7rSfJDT1UMReQ/AfgCgDdV9WPN59YDOABgFMApALeq6vm4Bkwa+KlM/LTOSTe8NY3ruVfOGsvZxnF3EFS3JGrM30+r7i5iCkM/uuRE+d8gxcQmJv7nAD7X8dwUgGdU9SMAnmn+TWImisrEVl7YS6eiqOqXqIW3bPYvQOSY/23XbTS+FkUq2I8cSt4UUyQ5Aj1xVf1rERntePpmAL/f/P0hAH8F4Fsxjosgmkdn8+Xu1VtPqx+jn7RREf1O4/6JLcaaKqbWb613FDuuHukKI337li2JhrTYE5O4RFWnfEBVzwBA8/H9pjeKyB0iMisis2fP9tbHcdCI4tHZyOp6XQyUllrHr25J2BZqttt7tX7rVMY8/MLpLiUKgJ7uOoLIm2KKJEfiEkNVfVBVx1V1fGSkt47qg0aUcrI2X+5eb8XTKs07MVbFV6/f1GXI4zBetkbRpp54P1Zs5rE8MkmGqBLDN0Rkg6qeEZENAN6Mc1BFIQ6VSNhysjYJxDhuxdMqzXv/xBaMf2i98fyiXnPbxKvtRNeP2HQeyyOT+IlqxA8BuB3A/ubjj2IbUUHoh0rERNCX21TbOi+34qbzC3vNvQx+ULNo25IDjE2TfmEjMXwEjSTm+0TkFwDuQ8N4HxSRrwM4DWB3koPMI1mWgMW5GCiM5xvFSw7apvV1oLvnpemaR51kbRpSxDEhciEPscVGnXKb4aUbYx5Loci6BKzTm3Ulh2ENrK0hjGI0g7YJWvzj4nXNo06yXhOglzqlF4Ob5l0cyR9cdp8QeZKARTUaYQxhFKMZtI1t02Kva97LJJt0LDrLd3Eke7AAVkLkSQIWVXIYxhBGMZpB29je1Xhd8yxXpsz6XRzJFjTiCZFVCZjXSs2oRiOMIYxiNIO2sTG464Ydz2ue1Ul2Zq6GIUPnoCxMMCR7MJySIFmTgJnCJpVhZ7W7eyteRqM14XZF2YFTkrZmDyZDGEURE7RNUJKxtZt8J2GTu6ZEY5wJSPfz8arjkoUJhmQTVjFMmX6qEEyNhStlBxeXVgIr4nklEp0hwbvXrsH8Qj0wyZe0OuWKsgMRrI4lzubQpqqNXuV3o95xmT6fkgi+c+vWTDkEpL/4VTGkEU+RfpcT9SuR+t092wINrMnIuF3oi1oe1c+4ennN7vUISz9K2JJ80lMpWpIc/VYh+ClmbEI/QbHzoqoqTOdtKl8bNQGZJ0UTyQ5MbKZIv1UIvSbzghKN/TyfXkrphsV03qWYE5BZTbaSbEMjniL9lrn1qpgJMjL9Oh/bHptxYTrv267bGKvRzaqiiWQbhlNSJI0aJr0oZoIUHf06n36HbfzO268YV9Rj0WiTMDCxmTJFq5HRj/OxSQAW7bqSwYaJzQxTNM+rH+cTlABk7REySDAmTnJHUGy+185FhOQJeuIkMZJY3AMEx+ZZe4QMEjTiJBGSKD3bil/YhnprMkgwnEISIUpII64wCPXWZJCgJ04SIYnSs7bE2bmIkKxDI04SIUpII84wSNFUP4SYYDiFJEKUkAbDIISEh544SYQoIQ2GQQgJD1dsEkJIxvFbsclwCiGE5BgacUIIyTE04oQQkmNoxAkhJMfQiBNCSI7pqzpFRM4CeLVvB4zG+wD8Mu1B9AGeZ/EYlHMdxPP8kKqOeL2pr0Y8D4jIrEnKUyR4nsVjUM6V59kOwymEEJJjaMQJISTH0Ih382DaA+gTPM/iMSjnyvNsgTFxQgjJMfTECSEkx9CIE0JIjqERb0FESiIyJyI/TnssSSIip0TkuIgcFZHClpUUkYqIPCYir4jIyyLyD9MeU9yIyObm5+j+/FpE7kx7XEkgIneJyAkR+RsReURE1qY9pqQQkW82z/NE0OfJeuLtfBPAywDek/ZA+sAOVS36gok/A/ATVf2yiLwLwHDaA4obVT0JYBvQcEIA1AD8MNVBJYCIVAH8CwAfVdVFETkI4CsA/jzVgSWAiHwMwD8F8EkA7wD4iYgcVtW/9Xo/PfEmIvJBADcB+F7aYyG9IyLvAfBpAN8HAFV9R1Xn0x1V4twI4GeqmvVV0VFZA6AsImvQmJBfT3k8SfF7AF5Q1QVVXQLwPwD8I9ObacQv8QCAPwKwkvZA+oACeFpEjojIHWkPJiF+F8BZAP+5GSL7nohcnvagEuYrAB5JexBJoKo1AP8OwGkAZwC8papPpzuqxPgbAJ8WkfeKyDCAPwSw0fRmGnEAIvIFAG+q6pG0x9IntqvqJwB8HsA3ROTTaQ8oAdYA+ASA/6iqYwAuAJhKd0jJ0QwX7QLwaNpjSQIRWQfgZgBXAbgSwOUi8rV0R5UMqvoygD8F8JcAfgLgGIAl0/tpxBtsB7BLRE4B+K8AbhCRh9MdUnKo6uvNxzfRiJ9+Mt0RJcIvAPxCVV9s/v0YGka9qHwewEuq+kbaA0mIPwDwc1U9q6p1AE8A+FTKY0oMVf2+qn5CVT8N4BwAz3g4QCMOAFDVe1T1g6o6isYt6bOqWshZXkQuF5HfcX8H8Fk0bt8Khar+PwCvicjm5lM3Avi/KQ4paW5DQUMpTU4DuF5EhkVE0Pg8X055TIkhIu9vPm4CcAt8PluqUwaPDwD4YeN7gDUA/kJVf5LukBLjnwP4QTPU8HcA/knK40mEZtz0MwD+WdpjSQpVfVFEHgPwEhqhhTkUe/n94yLyXgB1AN9Q1fOmN3LZPSGE5BiGUwghJMfQiBNCSI6hESeEkBxDI04IITmGRpwQQnIMjTghhOQYGnFCCMkx/x/ydpX+I4LD2wAAAABJRU5ErkJggg==\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(dataframe['RM'], dataframe['price'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 1440x360 with 2 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABIwAAAFNCAYAAABi2vQZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdf5hb133f+c8Z8ErCyIlANkxqwqak2FlywzLiVJOYLXebkEnMpIqVKVlZceRGbbNxu5vuVqp3mpEfx6ZcNZyWceVun3az7o+N+0hRKYnqRDKTpVOTTRMmVEt2SPNhQ27qlUQVkmMm5CgRBxLBmbN/ABdzAdzfwAUugPfrefSIgx/3HtzB3HvO937P9xhrrQAAAAAAAADXxKAbAAAAAAAAgHwhYAQAAAAAAIAWBIwAAAAAAADQgoARAAAAAAAAWhAwAgAAAAAAQAsCRgAAAAAAAGhBwAjAWDPG/JIx5ucH3Q4AAIBRYoz5lDHmXwy6HQDSI2AEjBFjzKvGmB8KeO5TxphXjDFvG2P+mzHmcOPxC43H3jbGrBhj3vH8/KnGa+42xqwaY/6ZZ3tve/5bNcZUPT8/1J9PHM1a+zettX9v0O0AAADjrdFPc/tL3zDG/LIx5j2e53/ZGGONMfe3ve8Ljcf/at8bHcJa+wvW2v9p0O0AkB4BIwAyxjws6a9I+iFr7XskTUv6qiRZa7dZa9/TePy3JP0t92dr7S80NvFTkq5J+gljzK2N973H877Lkj7ieezpPn9EX8aYwqDbAAAA4PGRRt9ph6QpSY+1Pf//SnrY/cEYs07SA5K+3rcWxtBoF4AhR8AIgCR9r6Rj1tqvS5K19hvW2i8meP9PSfq0pJqkjyTduTFmZ+NOWsHz2F8yxnyt8e/vM8acNsb8sTHmD4wx/yhgOz/QyI76lDHmDxt36h7yPP/Lxpj/0xjza8aY65J2Nx57wvOaHzfGnG3s6+vGmB9pPH6HMeZfGmPeNMZUjDFPEHACAABZsNZ+Q9Ix1QNHXi9J2mWMWd/4+UckfU3SN/y2Y4zZ1Mha2uB5bKrRT3KMMR80xvymMeatxmOHA7ZzVyOL6RPGmDca/aFPep4/YIx53hjzlDHmjyX91cZjT3le8z8YY37HGLNkjHndzYgyxtxqjPlFY8zlRj/vl4wxxcQHDUDPETACIEmnJP2UMWbWGDOdJBBijPkfJb1P0r+R9KzqwaNErLWnJF2XtMfz8E9K+pXGv/+xpH9srf1WSR9o7CfIn5b0bZLKqt+B+6IxZkvbdv++pG+R9Nttn+X7JP1rSbOSSpL+gqRXG09/SdJNSR9U/Y7fhyWRZg0AAHrOGPM+ST8q6b+2PfWOpBcl/UTj559Sve/iy1r7hqTflbTf8/BPSnreWluT9PckfUXSetX7c/8komm7JX2X6v2gubZSBz8u6XnV+1At2eTGmM2Sfr2x/Y2qB8LONp7+B5L+u8ZjH1S9D/eZiHYA6AMCRgBkrX1K0v8qaa+k35T0TWPMXMy3Pyzp162111QP8PyoMebbUzTjGUkfkyRjzLdI+ouNx6R65tIHjTHfZq19uxFgCvPz1tp3rbW/KemopI96nvtVa+1Ja+2qtfadtvf9tKR/Za39jcbzFWvtRWPMd6jeaXvEWnvdWvtNSU9qrbMGAADQCwvGmD+R9Lqkb0r6rM9r/rXqN/rukPT9khYitvkrWutjGdX7L+5NuZqkOyVtsta+Y639bf9NND3e6Audl/R/u9tt+F1r7UKjD1Vte99Dkv6dtfYZa23NWvtH1tqzjfb8jKRHrbVXrbV/IukXRB8LyAUCRgAkSdbap621P6T6XaG/Kelzxpi9Ye9ppAs/oMZdJGvt76per+gnUzThVyTta9RA2ifpP1trX2s899Oq33m6aIz5T8aYHwvZzjVr7XXPz69J2uT5+fWQ975f/jUA7pTkSHqzkUa9JOn/kpQmMAYAABBkxlr7LZJ+QNJW1bOmWzSCOhtVLwfwZZ/gTLvnJf05Y8wm1bOnrep1KSXp70oykv6jqS908tcjtuXtR/Wij7VR0qSkM54+1v/TeBzAgBEwAtCicdfnOdXnw/+ZiJf/JUnfKumfNWoQfUP1NOI009L+i+odjx9V63Q0WWt/31r7MdUDNP9A0vPGmNsDNrW+7bnNkt7w7iqkGa+rPuXN7/F3JX2btbbU+O9brbXboj4XAABAUo0s6V+W9IsBL3lK0icVMh3Ns60l1aedfVT1PtYz1lrbeO4b1tqfsdZukvQ3VO/TfTBkc+/3/LsXfaw/lFSVtM3Tx7qjUfgbwIARMALGj2OMuc3z3zpjzF81xtxnjPkWY8yEMeZHJW2T9HLEth6W9K8kbVd93vkOSbsk7TDGbE/Rtl+R9L+pfvfrOfdBY8zHjTEbrbWrkpYaD6+EbOdxY8wtjfpKP+bdVoR/KemvGWN+sHEcysaYrdbaN1XvaH3eGPOtjec+YIz5/qQfEAAAIKYvSPphY0x74WtJ+j8k/bCk/xBzW7+i+g29/fLclDPGPNColyTVV7y1Cu9j/bwxZtIYs03SX5PkWyTbx9OSfsgY89FG3/NPGWN2NPp2/1zSk25Jg0b/KzTLHUB/EDACxs+vqX4nx/3vgKQ/lvQp1aeTLUn6h5L+57B57MaYsqQflPSFxt0p978zqqcSPxz03hDPqJ6Cfdxa+4eex39E0gVjzNuqF8D+CZ/6Q65vqN7heUP1zsnftNZejLNza+1/VL3z86Skt1Sv53Rn4+mfknSLpP/S2P7zkt4b+5MBAAAkYK29onoG0c/7PHfVWvtVN1MohhdVL1b9B9bac57Hv1fSy40+1ouS/ra19pWQ7fym6oW4vyrpF621X4mzc2vtZdXrU35S0lXVC17f03j65xrbPNVYYe3fSdritx0A/WXin2MAIN+MMT8g6Slr7fuiXgsAAIB4jDF3SXpFkmOtvTnY1gDoFzKMAAAAAAAA0IKAEQAAAAAAAFowJQ0AAAAAAAAtyDACAAAAAABACwJGAAAAAAAAaLFu0A2I49u+7dvsXXfdNehmAACAjJw5c+YPrbUbB90OtKIPBgDAaAvrgw1FwOiuu+7S6dOnB90MAACQEWPMa4NuAzrRBwMAYLSF9cGYkgYAAAAAAIAWBIwAAAAAAADQgoARAAAAAAAAWhAwAgAAAAAAQAsCRgAAAAAAAGhBwAgAAAAAAAAtCBgBAAAAAACgxbosN26MeVXSn0hakXTTWjttjNkg6bCkuyS9Kumj1tprWbbDz8JiRYeOXVJlqaqCMVqxVuVSUbN7t2hmqhz53k+98DUt11Z9ny8VHR24f5tOv3ZVz7z8ulasVcEYfexD79cTM9sTt8V9/o2lqjbFbGMv9Gq/UdsZ1OcDAGBU5bkPhvFCP687wz4OyNog2smxCd/XHUVHxkhLyzVtKhW1e+tGnbh4pdmO3Vs36ujX3tS15ZqktbFze9uybH/Ytgf5nUoTm8iasdZmt/F6Z2XaWvuHnsf+oaSr1tp5Y8ycpPXW2p8L28709LQ9ffp0z9q1sFjRYy+cV7W20vFc0Sno4L7tgb+YhcWK/s6zZ7Wa8rB9fOfmlqBRVFv231vWkTOVluej2tgLfu1Ks9+o7fRqPwCA4WaMOWOtnR50O0ZFXvtgGC/087ozqOM3LL+3QbSTYxNvX0k5E0aHHrinJWiTVfvDti0pF9+pfu3bFdYHG8SUtB+X9KXGv78kaabfDTh07FLgF7paW9GhY5dC35s2WCRJz7z8eqK2PPPy6x3PR7WxF/zalWa/Udvp1X4AAECkgffBMF7o53VnUMdvWH5vg2gnxybevpKqrdqWtmXZ/rBt5+U71a99x5F1wMhK+oox5owx5hONx77DWvumJDX+/+1+bzTGfMIYc9oYc/rKlSs9bdQbS9XUz0e9N8pKW0ZX1PbaX9+rdkQJ2n7S/UZtp1f7AQAALXLZB8N4oZ/XnUEdv2H5vQ2inRyb7Lbp3U6W7Q/bdp6+U/3YdxxZB4x2WWv/rKQflfSzxpi/EPeN1tovWmunrbXTGzdu7GmjNpWKqZ+Pem+UgjGJttf++l61I0rQ9pPuN2o7vdoPAABokcs+GMYL/bzuDOr4DcvvbRDt5Nhkt03vdrJsf9i28/Sd6se+48g0YGStfaPx/29K+reSvk/SHxhj3itJjf9/M8s2+Jndu0VFp+D7XNEpaHbvltD3TvjHcGL52Ifen6gtH/vQ+zuej2pjL/i1K81+o7bTq/0AAIA1ee2DYbzQz+vOoI7fsPzeBtFOjk28fSXlTJiWtmXZ/rBt5+U71a99x5HZKmnGmNslTVhr/6Tx7w9L+pykFyU9LGm+8f9fzaoNQdyiUWkqkbvP9WqVtDhtmb5zQ98rtXvb1c1+o7bTq/0AAIC6PPfBMF7o53VnUMdvWH5vg2gnxyZ6X71YJS3L9sfZ9qC+U2O1Spox5jtVv6Ml1QNTv2Kt/fvGmD8l6VlJmyVdlvSAtfZq2LZYoSOeYVniEQCAdqyS1jv0wQAA6M44ja3D+mCZZRhZa/8/Sff4PP5Hkn4wq/2Oq/bl+CpLVT32wnlJGtkvNgAA6EQfDACA9Bhbr8ksYIS6fkUmw5YAHLcvNQAAAABgcIY5Q4ex9ZqsV0kba25ksrJUlVU9MvnI4bOa+txXtLBY6em+hmWJRwAAAADA6PIbBz/2wvmej4GTtGfX/HHdPXdUu+aPR7aDsfUaAkYZ8otMStK15VrP/2CGZYlHAAAAAMDoCsvQ6bc0wSvG1msIGGUoLALZ6z+YYVniEQAAAAAwuvKUoZMmeMXYeg0BowxFRSB7+QczM1XWwX3bVS4VZSSVS0Ud3Ld97OZYAgAAAAAGJ08ZOmmCV4yt11D0OkOze7e0VFdv1+s/mJmp8lh+iQEAAAAA+eA3Dh5Uhs6mUlEVn+BQ1FicsXUdGUYZciOTpaLT8dy4prQBAAAAAEZXnjJ0mF7WHTKMMuZGJod5WUEAAAAAAOLKS4aO2wbG4ukQMOqTvPzBAAAAAAAwLhiLp0fAqE/IMAIAAAAADAvGsCBg1AcLi5WWol+Vpaoee+G8JPEHBwAAAADIFcawkCh63ReHjl3qWCmtWlvRoWOXBtQiAAAAAAD8MYaFRMCoL97wWcYv7HEAAAAAAAaFMSwkpqSllmQ+56ZSURWfP6xNpWLWzQQAAAAAIBZ3nGsDnmcMO17IMErBnc9ZWarKam0+58Jixff1s3u3qOgUWh4rOgXN7t3Sh9YCAAAAABDOO871wxh2/BAwSiHpfM6ZqbIO7tuucqkoI6lcKurgvu0UCwMAAAAA5ILfONfFGHY8MSUthTTzOWemyvxxAQAAAAByKWg8aySdnNvT38YgFwgYpZCkJlGSWkcAAAAAAAxCt7V3GfuOHqakpRC3JlHSWkcAAAAAAAxCN7V3GfuOJgJGKcStSZS01hEAAAAAAIPQTe1dxr6jiSlpKcWpSRQ0B7SyVNWu+eOk6gEAAAAAciNt7d00dX77iely6ZBhlKGguZ5GIlUPAAAAADASgsa+cesfZYnpcukRMMqQ3xxQI8m2vY5UPQAAAADAsOqm/lHWmC6XHlPSMuSmuHlT3/yqzkv5SdUDAAAAACAJv7FvXqZ95X26XJ4RMOpS1FzI9jmgu+aPd7VUIQAAAAAA7QZdpydt/aOsBSVuMAaPRsCoC+5cSDe9zZ0Lefq1qzpx8YrvH+rs3i0t75Hyk6oHAAAAABg+QWNTSX0L4gw6YBWEMXh6BIy6EDQX8ulTl5t1itr/UPOcqgcAAAAAGD5hdXr6MdbMQ8AqCGPw9AgYdSFozmNQUWv3C5nXVD0AAAAAwPAJGpsG1dDttUEHrKIwBk+HVdK6cEfRif1aCmoBAAAAALIQVI/HSH1ZPp7C0qOJDKMuGBP/tcNSUCuv804BAAAAAP5m927Ro4fPdsx2sZIef+lC5mM8CkuPJjKMurC0XIv1umEpqOXOO60sVWW1Nu+0HxFpAAAAAEA6M1PljmCR69pyLfMx3uzeLSo6hZbHhmUcjGAEjLoQFC29/ZaCCo30o4Ix2n/vcMyXDJt3CgAAAADIr3LMbJ4sxngzU2Ud3Ldd5VJRptGWg/u252YcvLBY0a7547p77qh2zR8nKSImpqR1wW95PqdgdOPmqlZsPb67Yq2OnKlo+s4NufljCcK8UwAAAAAYTn7j0yBZjPHyWlg6zyu45R0ZRl3wi6Lefss61VZbkwGHJUsnKGOKeacAAAAAkG9+49NSwEJN4zTGYyZNemQY9dhS1b+u0TBk6fhFpJl3CgAAAADDoT3Lpz27Ruoc4436wkfMpEmPgFEX/FLbjORbbGwYIrjuSWGUTxYAAAAAMC6ixnjjMF2LFdzSI2DUBb/UNit1BI2GKUsnr/NOAQAAAADJhY3xwqZrjcq4kJk06REwChGVmheUwmZVny9Klg4AAAAAIK/GYbpWnCwrZtn4I2AUIE5qXlBqW7lU1Mm5Pf1rLAAAAAAACY3LdK2gLKtxmJLXDVZJCxCnkvrs3i0qOoWW16RNbVtYrGjX/HHdPXdUu+aPa2Gxkq7hAAAAAICujMv4rJdj2mHECmrhyDAKECc1r1dFoolqAgAAAEA+jNP4bNwXPhqHKXndIGAUIG5qXi+KRI9DoTEAAAAAGAbjNj4b54WPxmVKXlpMSQvQz9Q8opoAAAAAkA+Mz8bHuE/Ji0LAKMDMVFkH921XuVSUUb2Q9cF92zOJvAZFL4lqAgAAAEB/MT4bH/0c9w8jpqSF6Fdq3uzeLS1zZCWimgAAAAAwCIzPxss4T8mLknmGkTGmYIxZNMZ8ufHzBmPMbxhjfr/x//VZtyHviGoCAIBeov8FAOkxPgPq+pFh9Lcl/Z6kb238PCfpq9baeWPMXOPnn+tDO3KNqCYAAOgh+l8A0AXGZ0DGGUbGmPdJuk/Sv/A8/OOSvtT495ckzWTZBnRnYbGiXfPHdffcUe2aP66FxcqgmwQAAELQ/wIAZI1x4njIOsPoC5L+rqRv8Tz2HdbaNyXJWvumMebbM24DUlpYrLTM3a0sVfXYC+cliWg7AAD5Rf8LAJAZxonjI7MMI2PMj0n6prX2TMr3f8IYc9oYc/rKlSs9bh3iOHTsUkuhN0mq1lZ06NilAbUIAACE6bb/1dgGfTAAQCDGieMjyylpuyTdb4x5VdK/kbTHGPOUpD8wxrxXkhr//6bfm621X7TWTltrpzdu3JhhMxHkjaVqoscBAMDAddX/kuiDAQDCMU4cH5kFjKy1j1lr32etvUvST0g6bq39uKQXJT3ceNnDkn41qzagO5tKxUSPAwCAwaL/BQDIGuPE8ZFp0esA85J+2Bjz+5J+uPEzcmh27xYVnULLY0WnoNm9WwbUIgAAkBL9LwBATzBOHB9ZF72WJFlr/72kf9/49x9J+sF+7DfPFhYrOnTskt5YqmpTqajZvVtyVyDMbU/e2wkAADrR/wIAZKHf48RhGDuPqr4EjNBqmKrKz0yVc9cmAAAAAMDg9GucOExj51E0iClpY4+q8gAAAAAAhGPsPFgEjAaAqvIAAAAAAIRj7DxYBIwGgKryAAAAAACEY+w8WASMBiCqqvzCYkW75o/r7rmj2jV/XAuLlUE0EwAAAADQBcZ23WFFtsGi6HWX0lRsD6sqT1EvAAAAABh+jO264461q7UVFYzRirUqs0paXxEw6kI3J4CgqvJhRb34owAAAACA4cDYLr32sfaKtc3MIo5d/xAw6kLQCeDAixcSZx25KOoFAAAAAMOPsV16BNvygRpGXQj6Q1+q1lRZqspqLeso7lzVoOJdVmLOKwAAAAD0Wdo6RHcUnUSPYw3BtnwgYNSFuJXZ3UhoHH5FvVyVpaoePXxWn144H7uNAAAAAIBk3CDRXXNH9ejhs6kSAoxJ9jjWsDpaPhAw6kJYcKdd3EjozFRZB/dtVzkk0+jpU5fJNAIAAACADLj1cyqNMZxtez5uQsDSci3R41jD6mj5QA2jLvitdrZ846au+ZwAkkRC3YLYd88d7Tg5SfUTVh7mbqZZIQ4AAAAA8syvfk67OAkBm0rFZtDJqzTpaNf8ccZRIcJWFkf/EDBKISxQ0l7NXUofCQ06wUiDn7vJEpEAAAAARlHcYFCU2b1bOsaGknRtudZMMmAcFSxoZXH0D1PSEvKmJ/rNYfVOKTOSyqWiDu7bnuqLPrt3i4Kmtw66CHZY1fok0haQAwAAANAd+uL+ooJBcRMCZqbK2n9vObJmUZpxFNAPZBglFGd5v15FQmemyjr92lU9feqy79S0XkSjk0wr877Wrz1SsswnspQAAACAwaAvHswvM8ioftO+nGBq1MJiRUfOVGSDBk8elaWqFhYrHdulDAgGiYBRQv1e3u+Jme2avnODDh275Ds9rT1YlUSSi4TfVDs/SWo1xQm+AQAAAOg9+uLBelU/J04tJK/2sRhBPQwaAaOEguoKZbm8X1QR7LTBqiQXiTgnu6S1mvodfAMAAABQR188XC9mjSQ9lu1jMYJ6GDRqGCU0yOX9goJSaYNVSS4SYSe7tLWaev15AAAAAMRDXzx7aY6ld9xFUA+DRoZRQlkt7+edm1qadGSt9Fa11rJ9v7m03QSrkmRLBb22XCrq5NyeVPvv9ecBAAAAEA998Xi6qSEUtEra+klHkporpXlNGNOsZTSI2S2AFwGjFHq9vF/73FTviaOyVNWjh8/q9GtX9cTMdkndBau8J7w7io6cglFtZW2iW9BFIosLSlbBNwAAAADhxq0vnibw020NobBjHFQjdsXa5j7yENSj6PZ4MzZOyfYBm56etqdPn85s+4P+I9g1f9w3cuxlJD354I7mySVNe/1OSs6E0XtuW6el5VqiVdI4WQAAeskYc8ZaOz3odqBV1n0wAOgHv3FQ0SlEltQIGqetn3Q0ecu6VOMx73hq99aNeubl17XiMyZ3Z3IMcgyW9rhhuIT1wcY+w6ifleeD/tijgkVSfQnHQ8cuSVLq9voVTautWk3esk6Ln/lwZBt6nVkFAAAAAFlLWzw6aJx2bbnWnBUSdzy2sFjR7PPnmrM7KktVHf5P/sEiaa1O0SDHYBTdxtgXvQ77I+glNzBVWarKau3EsrBYUcGYWNt4Y6naVXspmgYAAABg3KQdB8Udp8UZjz3+0oWWUiCSVFuxmgjYhVvLaJAYP2LsA0b9+iMIC/QERZXbbSoVu2pvqVFcLe7jAAAAADDs0q4IF3ecJkWPx/wKXEvSqlXHKtzuvt0Eg0FhJT2MfcCoX38EYYGecox9ucXNumlv0PluCMpYAQAAAEAqs3u3dARl4hSPjjNOc3Uzfjy4b7tvNlMWM1+SSHvcMDrGPmDUrz+CsECPXxucCaP1k46M6icqt7BYN+19q+of1Q56HAAAAACG3cxUWQf3bVe5VOwYX4XxHacVjJy2eWRxxmOlYsBsj6KjmamyViNqGQ1C2uOG0TH2Ra/7tZxk2JKISdrQTXs3lYq+hdvykFLICmwAAAAAspKmeHTQ2MvvsahtH7h/m2afO6faamtgyJj6WCivYzUWPhpvxg7BfKRRWdJ10EGRvC6LmNd2AQD6J2xJVwzOqPTBACAPFhYrOvDiBS21zfAoOgXtv7esI2cqjInQd2F9sLHPMOqnQUdn+5VNlRTLNQIAAAAYdTNTZR06dqkjYFStrejExSs6uG977sZqGG8EjFLoJlNoUFlG7ft98sEduTn5sFwjAAAAgDzr1TgubOzTfoPfLXgdtp9Bz2LBaCNglFD79KnKUlWPvXBeUvgfctB7Hz18Vqdfu6onZrZ3vLbboFRlqaqCMVqxVkaSO/kwSZv7Ia/zdQEAAACMjrRjrE8vnNfTpy73ZDwVNPa5o+ho6nNf0bXlteyjqP30sl2AHwJGCXUzfcrvvVbSU6cu68vn3tRb1Zo2lYravXVjy/zVboJSK40aVe2Vqrqd8tXLSHZYQXAAAAAA6FbaG/8Li5WWoIwraDzlHSfdUXRkjLS0XGuOmfzGPs6E0fUbN1Vb6awvHLafJO0C0pgYdAOGTTfTp8Jes1Styap+4nr61OXAoJRrYbGiXfPHdffcUe2aP66FxYok/6BUmvaEcU+2laVqs82PvXC+2YakWK4RAAAAQJbCbvxHvS9omaj28VT7OGmpWtO15VrLmElSy9inVHS0Yq1vsChoP0nbBaRFhlFC3UyfCnpvu6g/fL/o+COHz/pW3I9qTxpZFKkedEFwAAAAAIOXVU2etDf+w55vH09F3bx3x0wn5/ZoZqrcHNetRixc7jduS9IuIC0yjBKa3btFRafQ8lj79Kmg7J/ZvVtkuti3+4cfdCJaqtZib7+bKV8UqQYAAADQa72ayeA3HgsKokQFV4KeN1LHeCrprJM4s0OCxm1J2gWkRcAooajpU2EnuZmpsh7auTlWUKf9Nd4TRdiJyPq8t32b3Uz5WlisaML474FINgAAAIC00k4b8woaj+3eujHyxr8fv4QBI+mhnZtbxlNh4yQv75gpKsBUKjqB47a47QK6QcAohZmpsmb3btGmUrG53GFYDSHvSe6Jme168sEdzYDT+klHzkTriaXoFPTQzs2BQamowIxtvEeSCo2TVrlU1JMP7tCr8/dpdu8WHTp2qSMDKop78nULabe3mUg2AAAAgLR6MZMhaDz2zMuva/+95ZZx2K3rJvTo4bOhYyK/hIEnH9zRssp12DjJq33MFDSuKxijLzy4Q2c/++HA4E+cdgHdooZRCmEV9uOc5Nrr9SSdp+tXWd+rXCrq5NyexG1Ps8qbVD+hUaQaAAAAQDe6qRfrChqPrVirI2cqOrivHlBJMiaKqrcaNE4ypp4l5F0lzbudoNWi446tqAOLrBEwSiEsiyjoJFeadLRr/rhvUCjuH3r7Eo0TRrp+o7Udfpk+3vdNGNMR+Y5bsDro5LtqLScqAAAAAF0JCqAkmckQttBQtbaiRw6fVaGLMZGfwAwoKy1+5sPN8dijh8/q0LFLzbGgu6+0Rb6zKhAOuAgYpRCWRfTkgzt8s3+uLdeXVJTCI9hBf/TtmUFL1ZqKTkEf37lZJy5eCTxJtL8vKE0yTppnLyL+AAAAABDkNmeiOXYpFR0duH9boiBI1GwMqbsxkZ+wcVLUDI80ybhcS7cAACAASURBVAObSkXt3rpRR85UUs0cAeKihlEKYRX2vXNJpeAC1H7F28IKZgdlNZ24eEUn5/bolfn7msszesWpvB/2mbzirBAHAAAAAEm5YyH3JrskvXtzNfF23PFYIUYB6nZpb4SHjZOyKuT99KnLXW8XiELAKIWowMnMVFkn5/aoXCoqrOxZewT7wIsXfP/oP/nsucC0yqgoeJwoedygT9QKcQAAAACQRi8CK66ZqbI+/9F7OsZsYYyk3Vs3Jt6Xu7+gcVJWhbyDxplps6QAP0xJSyHuXNOoP1ZvBHthsaKlas33dWHV9qOi4EHpkQVjtGpt4rmuw1RYjTm9AAAAwHDoRWDFy+33H3jxQuA4y8tKOnKmouk7N6QaMwSNk7ot67GwWAlMHvBDuRD0EgGjlOIETsIKrhWdgnZv3dgshD2RImUyTmZQt5X3h1U3q8ENEkEuAAAAjKOgsdOEMbp77miqvvHMVFmHjl2KFTCS4hW+7sUK13FneLhjmiBGrZlGlAtBrzElLUN+U9ekevG2/feWdeRMpTkPNSyLyE/c6WDjOo2slymt/RJWwwoAAAAYZUFjpxVrE/WNFxYr2jV/XHfPHdWu+eOJsnOk8IymNP31bsZjYfVoi05BD+3cPHbjPPQXGUYZCpu6tmv+eKxi1H7KpaJOzu1J1I5xO3H0OqW1H8KCXOP2+wMAAMB4aR87TRjTcVM9qm/sN8ugPQvHVfDZvhQ+pSttfz3teCxs7EJwCP2QWcDIGHObpP8g6dbGfp631n7WGLNB0mFJd0l6VdJHrbXXsmrHoAWdHNIGLoYlzXDQU6u6nSs8CMMY5AIA5A99MADDyjt2unvuqO9rwvrGQcWh/aZuuTM+kkwVi9Nf7+U4KGhMU26szg1kLcspae9K2mOtvUfSDkk/YozZKWlO0lettd8l6auNn8dO0sBFVmmG7SmbfumUcV7T/vpBT62KWskuj4K+E3kOcgEAcok+GIChF9QHnjAmcFwRNP3MSi1Tt/bfW9aJi1dUra2o0KglG2esFdVf7/U4aBjHNBgtmWUYWWutpLcbPzqN/6ykH5f0A43HvyTp30v6uazakVd+xc+CJJ2CFtfCYkWzz59TbaUeb68sVTX7/DlJaymhaYpH52FqVdB0QEnNQuN5KyrdTUE8AABc9MEADCtvdk5p0pEzYVRbbZ02tmKt73hkYbESOP3MO55qH9+sWCsjaffWjaFT3Q4du+Q7xc3bX+/1OCju6txAVjKtYWSMKUg6I+mDkv6ptfZlY8x3WGvflCRr7ZvGmG/Psg2DECcN0f35k8+eCy14nWXA4PGXLjSDRa7aitXjL11oOTklPenlZWpV+3TAXq+c1utpd1wQAAC9Mq59MADJDbqUhLcd3r76teWanIKRMVL7cMlvPHLo2CXfYJGRWsZTQdPWnj51WdN3bugYPxx48ULLKmveKW7ltuOVxThoHOvRIj8yDRhZa1ck7TDGlCT9W2PMn4n7XmPMJyR9QpI2b96cUQt7L0lQYmaqrEcPnw3cVsGYjrTIXp7Qry37Ly/pfTzNSS+v9YN6GfHvdfDJxQUBANAL49gHA5BcVn3aNB5/6UJHX7395rZX+3gkaHxi1fpZwl7nHRe0H5v21/rNAsnrOAhIK8saRk3W2iXV055/RNIfGGPeK0mN/38z4D1ftNZOW2unN27c2I9m9kTS5dzDTh6r1vpmyPSzNlCaujp5nWvby4h/0t8zAACDME59MADJ5aVPu7BYCbyZHaR9PBI0PinHfJ3UOi4IW9K+/bWuvI6DgLQyCxgZYzY27mrJGFOU9EOSLkp6UdLDjZc9LOlXs2rDICQNSuzeGtwRaz+Z9fqEXio6gc+5xa3TnPRmpso6uG97S2G5PCz72Mui0nmZdgcAQLtx7YMBSG5Qfdr2RXUOvHgh8LVFZ0Km47HO8Ujcccvs3i0d23N5xwVRx8BvDJHXcRCQVpZT0t4r6UuNOfQTkp611n7ZGPO7kp41xvy0pMuSHsiwDX2XJA1xYbGiI2eCs4OWb9zUwmIlszmxB+7fptnnznUUkpPWspcO7tuug/u2Jy4encepVb0sKk26KQAgx8ayDwYguUH0af2mwYW5uWpbahMZSfvv9R9r3Lpuornd9ZOOPvuRbb5lQU6/dlVPn7ocWLxaCj427mt3b93oOx7K4zgISMvYkILLLS805k5J32Wt/XeNu1XrrLV/kmnrGqanp+3p06f7sauu+c11LToF38jyrvnjkSdI971ScIHs9ZOOJm9Zl6qukbfivx+/ublJPmMS/Si416t9ZHUMAGBcGWPOWGunB92OPKIPBiAr/ejTtve/l2/cjD39zK/gtctbcDrN54gaFwTVMFo/6ei+73mvjpyptDznFIxuv2Wd3qrWWLwGQyWsDxYrw8gY8zOqFz/cIOkDkt4n6Zck/WCvGjns2peAvHXdROTJIk5mULW2osdfuqB3aqu+wSKnYPT2O2sn3fZCdVEnQjcCfvfcUd9VBfza2OvlIqX+FdzrVcSfFc0AAP1AHwxAlrLu0ybNJvIqOoXQGkKVpaoePXxWjxw+q4IxHWOlbscnYcdm1/xx3wLd7mpqgyweDvRS3ClpPyvp+yS9LEnW2t9nKdY1fktAFp2CnnxwR+gJIizN0SsoAl8w9Si2d5lHqbWukV8Q5vRrV3Xi4pWWE1+SdNQ0U+OiAldZBKGyRropAKAP6IMByFSWfdqowtFefrMmwmZCSGre8Pa7sS4Fj0/i3qwOOjZxb/zneSwDxBE3YPSutfaGMfXyYMaYdZJvQspYShvs8Kupk8SqtXqr6h9MemOpGtgu73xd9+S4/95yR1pl0NzcpHOd45yQKSINAIAv+mAAhlbcvnzRKfjWG5Kkv/PsWfmUXI0laHxy4MULXd2sjnvjn7EMhl3cVdJ+0xjzKUlFY8wPS3pO0kvZNWu4pA12tFfRLxUdOYXWmv1FpxC4mtkdRSd05a+g/befb6u1FZ24eKWjor8bRKosVWW1FujZvXVjopXTggJXj790obk6woTxX6uAItIAgDFHHwzA0Ghf/eyOgHFMqejEWklsZqqcOkLuFIzv+GRhsdIxQ8MVN8DjtyKbH8YyGHZxM4zmJP20pPOS/oakX5P0L7Jq1LDpZnWB9jTHTy+c1zMvv64Va1UwRvvvLWv6zg2+q5ldv3FTP3ZPZ8E1N3gTlcLp9cZStaMtfnNzvcGluHOdg06815Zrzel2fmmkaVcwS6MfBbcBAEiBPhiQc/Qj6/xmFTgFI2fCtIxjik5BB+73zybyE3ONJp83+j/slu7wEzfA017fqDTp6O13bnZ8zn6NZYCsxA0YFSX9K2vtP5ekxjKtRUnLWTVsmPRqufaFxYqOnKk0gycr1urImYqm79yg99y2rqOWUW3FRgZv2ttl5H/uTFqrKMlc57gpm1K9LtOqtX292Par4DYAACnQBwNyjH7kGr9ZBbUV29WKzpJ8C1rHUVu1vlPMwrKIkozf2sdDBA4xiuIGjL4q6Yckvd34uSjpK5L+fBaNGja9Wl0grBbSUkDh67DgjV+7dm/dGJiR1H6Su6Po+KZrJk2tTFKracVavTp/X7Mtjx4+m/kJdxgLbo8qLrQA0GHk+mCc6zFK6EeuCQrELC3XtPiZD6fe7sc+9H49deqy73PuzeagcJJfm8JuZrvZR2l+dyyIg1EUN2B0m7XW7ajIWvu2MWYyozYNpV6cIMIyetJOe/Nr1/SdGzo6alLnimpBKaRJM6f8AlfX373pG4wyqk/L8wa1sr5TQ8HtfOAOHQD4Gqk+GOd6jBr6kWu6KdMR5omZ7YEBo1Vr9cr8fdrx+Fd8xxZ+NZRm927xLfchcU4C2sUten3dGPNn3R+MMfdKGr+zYMbCClj7FVZLOy92Zqqsk3N79Mr8fTo5t0czU+XAFNLaar2WkhRekC7pPg/cv01+Za6tpGdefj3wTk0Wwo47equ9EOLCYqX5XNgdOgAYYyPVB+Ncj1EzKv3IsD5aXL0YrwS1oxxxnAPWz/F9fGaqrPfcFpw3wTkJWBM3YPSIpOeMMb9ljPktSYcl/a3smjWewk6yfiuq3eZM6NHDZ1Of1L3C7oKsWNvSjl4IW/EgaI5yVndqehmMQzD3rnL7qnvud5c7dADga6T6YJzrMWpGoR8Z1UeLG0xqH68kvdkc1o6o4xxUviPp4y7OSUBdrClp1tr/ZIzZKmmL6rOGLlprw//KkFhULSR3elkW6dxRhamzmItdTlAMW8ruTk2valAhXNQc/6zSmAFgmI1aH4xzPUbNKPQjozL/kow7uinTEdaOk3N7mq/xO85Jzy1RY59NpSL11gBJxoZUnDfG7LHWHjfG7PN73lr7QmYt85ienranT5/ux65yI+wEtWv+uO8JrlR0dPutwSsQhG2zPQgVxEg9O2HG3adUv4OQdjoc8uHuuaO+WWVG0iuNQud+qw3yewfGgzHmjLV2etDtyItR7YNxrgfyJ6yPFhRYKZeKzSBOP9rximdRnLhjGadgtG7CqFpblSStn3T02Y9s870B71V0Cvqzm+/Q73z9akt7OFdhVIX1waIyjL5f0nFJH/F5zkrqS2dl3ERlEAWuQFCtNYu9tb8napveuyNh0Xbr896gzxAVkW+/IzMRsGRmwZihPzlzhyL6zs8o3KEDgB4ayT4Y53qMmlHo44X10bKcRppkheYkY5k3lqoqTTp6a7mm2sra2OLack2zz59rvsd9fWWpqkJjHFJurCr99KnLHcGrcV39DuMtNMNIkowxE5L+srX22f40qdO4ZRgFZRC5kfyg5/1Evcfv7kDczJ+gOwtp7x5G3VUYVtxNreM4AAhDhlEn+mBAvo1K3ybscwTdTO42wygoI0hWHSs0x22HNwAVdCM6TtvDxlrDPi4B/IT1wSKLXltrVzXExRWHUVQk36/oW9S2gk56fo+3F6xL2s60K6CMyioT7VgRpq7bQogAMG7ogwH5Nip9vLA+WlZFvYNWaH7Pbet82xE1PmovmB0ULPK+J83zwz4uAZKKVfRa0m8YY/531VfmuO4+aK29mkmrxlyaqTvLN27qmk+1f/c9hZDpXn68qZ1BUfagE2ba1NXZvVt8724M0yoTflgRZk03hRABYEzRBwNyapT6eEF9tKymkQaW2FiuafEzH+54PGp85BeAChIV9Anal5GGflwCJBU3YPTXVZ8v/7+0Pf6dvW0OpHiBk/aTelAqqfueoCh7WPQ9SXu80q6AMqp1DVgRBgDQBfpgQE6NSx8vixt+SY9d1HgkbpDOKZjIoI/fvoykh3ZuHvpxCZBU5JS0hu+W9E8lnZN0VtI/kbQtq0aNuzRTd6LeUw44+QY93k17ukldnZkq6+TcHr0yf59Ozu0ZiZNyVqm8AICxQB8MyCn6eOklPXZR45GgQJN3MsX6SUeH/vI9keMLv309+eAOPTGzPfbnA0ZFZNFrSTLGPCvpjyU93XjoY5JK1tqPZti2JgouRotaoaHfRflGYcWIXuJ4AEA4il77ow8G5Nuo9PEG8Tl6uc9RKUAODEJYHyxuwOictfaeqMeyQmclXNwT5MJiRQdevNBcrnL9pKPPfmTbwE+io3KhBQCkR8DIH30wAFkLG0tI+SkXEecGeV7aCgyTXgSMflnSL1lrTzV+/pCkh6217fPpM0FnpS7oJBhUlNoYyf31loqOfuye9+rImUrHxWD/vWWduHgl8uSaxUn40wvn9dSpyy2PFSaMvuXWdXqrWuNkDwBjgoCRP/pgAHrJrz8ftGS9n7hZO+5+KkvV5uI75S6CPGkyiPoVQCJQhWHXi4DR70naIskd2W+W9HuSViVZa+339Kitvoaxs9LrE0fYSfKRw2d70eSO7UprdxTuKDq6fuOmaiu243XdpI7GabtTMLr9FgJIADDKCBj5ow8GIEySMUfQeCLu6mKusifQ5LffTy+c19OnLitolFkqOjpwf70Um197/G5mBwW1yqWiTs7tif1Z/WZgdDNmYyocRkEvAkZ3hj1vrX0tZdtiGbbOSq9PHAuLFX3y2XO+K5qVio7eqtYCT8hprZ909E5tNfICEnSSjiMoMypK3k/C3GUAgOQIGPmjDwagnTd7x0gt44CwfnJQ39vNAEqiPdDkriI2fecGPXr4bOTYxL0h7JbK8PL7TEFjEiPplfn7Oh4P+qzesUsvxmxx9gPkXVgfbF2cDWTdGRk1h45d6jipVWsrOnTsUuLAgXsiCzqJ+51ke+Hacrztxl3C0st7kUsj7FgOem5z+4WnslTVYy+cl6TYqbsEmgAALvpgALza+5rtI4RqbUWffPacJLVk/Dzz8uuB44mkwaKCMR1jHSvpqVOXdeTMf4t1I7u2YgPHMX6fqT2I5Lqj6PhuI2iM4n28F2O2OPsBhlmsgBGS6eWJw+9ElidBS1gG8Yvkp+F3LKOCNd0Ec+JKe+HpR9sAAAAw3OKMDVasbfYjT792taNeaDsjqehMaLm2Grn/qCls1RjbSCMoCGWM/+ObSkXfm9PesUsvxmxx9gMMs4lBN2AUBZ0g0gRXwrJwAs6PXSs6BZUCovXt+5/duyXRtnsVAGs/lu60vaBgTdC+vc/3QtoLTz/aBgAAgOEWN5jh9iOfefn1yNdaScaYyLGFkXTrunwNH5cCZkXM7t2iolNoeazoFFrGLr0Ys8XZDzDMyDDKwOzeLb7zYZOcONyMkzC9rlsk1S8E1dpKrKCOlX/2S9jUqiQReyOpNOno7XduqrbaWmzbeyyjpu25QbewYE6vpoOlvctAOisAAADatfdRS5NOotIRcccL12+E9/0nJBUKJrNyGGltKhVD+/Fh/fu4Y7aw7cfZDzDMCBhloBcnjkFNRUsShCr7BEHCplZJ0kTMonrOhNGhB+5pTiULO5ZRx8o02hUUzClNOj2bDpY2WEg6K8YRdbsAAIOU9+uQX7/amTByCqZl5eIgm0pFfeOtdxLXKHIVjNGqtdpUKmr5xs3YgarbbylEBqB6wSkY7d660bcff/q1qx0rrbX/buOM2fx+B48ePqtHDp9trhY3M1XO1fcG6KVYq6QN2ris0OG9aPXit2IkffDbb9fvf/N6D7bW6eM7N+uJme3Nn8NWc4u76ppX3NUF7p47Gnm83BO6XzDn1nUTvndL0q5ukKbzwZKcGDd859GOVdLyaVz6YBg/w3AdClqBq1R0dPut65p9zd1bN+rImYrvqmWSImsYBXFXIFtYrOiRw2djv+c2ZyJVLaPChNHKavxRkHsc/I5RktXjwkSt6py37wyQRlgfLF+TUMeYe9Gq9ChYVC4V9eSDO7R8I5vCc5J04uKV5r+jpoVdW64lzpiKOx0rThbOG0tVzUyVdXDfdpVLRRnVj9HBfdv1VkBqbTcrwCW9UxXUNi4+GFXU7QIADNIwXIeC+qJL1ZpOzu3RK/P36eTcHj0xs1377y231CCyko6cqWj6zg36eCNwlJQ73SuqTIaXVfrC16sJgkWS9Fa1FniM/FZaS/O7jRoP5O07A/QaU9JyopdT0LyZMY/GvBuQRtSylN1yA0HeIMwdRUfG1AvcuQEZv8yhoG35pYweOnap6+lgC4sVPf7ShZZU3aipbe3Bpd1bN8beX790k6qd9zRvDBZ1uwBkjesQwnRzHYrz3erF9y+oZIGR9OmF8y1TrpZv3PQNkjx6+KxKk07zfXFDMs6E0fKNm7Ezi1ylopO6zlHSm+ZuXz0sA8grTR8j6HfQ7XaBYUGGUU706kTjFIyuv3tTd80d1Qce+7VMCmO73LsOcVI146y61v6e2b1bOjKvlqo1XVuuyap+cXjk8Fk99sLXNBGyrINTMKE1hPxWN3CP491zR7Vr/rgWFiuB73fb6DevO+iuQ/vnqixV9dSpyy0/P/bC+dD9Zs2vjXHb1M17MR56tZokAPjhOoQoaa9Dcb5bvfr+ze7d4rtymZX0dFu/Mai+kJWaz1mtrbIctSLaqud9cU1IgZn7veau1uzXjw/6bGn6GH7b78V2gWFBwCgn7ggIqJRLRX3hwR2RJyqpXmBOVs2oftoCd3EUnUKzyFxYsKhgjA7u264D928LPJmXS0V9fOdm3+lYcTKXqrXV8MJ6Vjr92lXtmj/eDKTd5QkEtU8HWz/pNI9jnIt8VBv9goHxPtdgU1y7SdUehjRvDBbL0ALIEtchREl7HTrw4oXI71Yvvn9uhlJQbz5tL9+q3td9KGKaWpJaQq5V9W4V54IxoUEtdz9uP3795NpY6jZnQk6h9d1p+xjecYLUGYyi74JRx5S0HFhYrOj6jZsdj09IWr5xs5lKeuu6Cb1Vrak06eit5Zq8s4OdCaNb1k30ZUWCCSMd3Lc9MuhRdAraf2+5ZTrZbc5Ey3Sy9lUI3Ne6F9S4KaZhaqtWT5+63LywuIG09iljblt2zR/vuKNSra3okcNn9fhLF2Rt/e6J+xmissP87jrEzSgbZIprWKp2VJo1040QhWVoAWSJ6xCipLkOLSxWAqdbeb9bSb5/fn0qSZHlFrpxbbmWuhB2v6xaq1fm7wudyeCtrfSOp25StbYqZ8Jo/aQTOO5IwjtOYKorxg0Boxw4dOyS79KY3lTQa8s1FZ2Cnnxwhw4du9QR0Kit2sRpo2mt2vqJM6w+UtlnxYal6tpn8JvnPfvcOdVW14I5s8+dkzFSLxKlgjbh3u2JE+yQ5FujqDTpBB77oLsOceZDu69LopcXsaA2liYd3+VLpbXOV9B7SdmFF8vQAsgK1yHEkfQ6FJYh5P1uxf3++S3Z/sjhsz3r/w4z91jt3rqx5cavlzdrqz24Vlu1mrxlnRY/8+Getou+C8YNU9JyIO7dLvekOOi7Y0b1C1xUp+vo196MnY574MULzWCRq7Zq+3KxbD+eSTqT1dqKrJXvlMFS0Qlc6SzOfOikKa69rtcQlKptbedFuf33ynQjAMAgcR1CFsL64N7vVtzvX1C2fpr+b5qaod0Iqx/aLW8t0yNnKqHT3N5YqpJRCGSIgFEOJAlQuJkj3fA7vxtJuz6wIdb7reoXuLBVvcKK77WfvMPSe/uh/XjGCeZ4vVWttdRAcutOnf3shwPvQMxMlbX/3rIKpv7bKBijXR/Y4FvHKa5e12tor+3ktimomKH39xr0Xu7IAAD6gesQshDUB18/6bR8t+J+/3oR0PBu/8D927rensud0uXuw6voFFTIKGDkveH6+Eud9aLabSoVIwuYu4v0RC1mE/d1wDgxdgjyHaenp+3p06cH3YzMtKejSsHLXhaM0Yq1iZbFnHQmVFu1vtPevNxibnHrBjkTpiMrKI5yqaiTc3sk+X/2dkWnkNkcbrfOkndZUvfuz6Fjl2IdC+/nCdI+Vax9up7blm46s3fPHfX9ThhJr8zfl2qbfoLmksc5DgAQxBhzxlo7Peh2oNWo98GQvVGq+eLXb43TfwuqU/TJZ891tUiNX99r6nNf6apMhZE6fk9+7X8kpDRFGmWffUbtwz32UmfNpzjPtddSTfO7BbLWj3NoWB+MgFFOxAkopOUGmaIYSU8+uCPTIntOwej2W9Y1i0Yv37gZeVErFR0ZIy0t13SbM6FqbbXl+cKE0YSUOHjlV2dJar04xAlo7frABr36R9XAP+IkAcGkQRfv92Yi4PecZJtxTkjDdkEdpY4qMMoIGOXTOPTBkJ1h6zPEkbRf4XcMnIKRbPK+q5d7HE+/dlXPvPy6VqxVwRh958ZJ/ddvXm/pZzoFE3nj2MsdO/gFcdzP3ssRpN/NzbBi15J/gMnv9xL3Ric3RJFH/TqHhvXBKHqdE34F1Kbv3BAZDIgj7vs2lYodK0aUJh29/c7N1Be0UtHR7beuU2Wpqgkj1VZsc/pZ3Ewmt1j2Qzs362mfFR1WVq2+ddLR5C3rmheJqECUkXRybo92zR8PnMbl/Z2E3QE6+fWrzX/7FYD2myoWdDQrS1Xtmj8eqxPSfgLxa1+Seg1+hRfbP4t7Ma7WVgI7E3kS5zMBAIBshE2XH9brcJpC2R0FmWMEb6Iy7PffW9Zzpy+39ENXrNXvf/N6y+uMpAe/9/06cfFK7L63d0XhRw6f1SOHz+r2Wwq6cXO1qyBXkKQrCn/BZwGdoN9L3PpG1EFCHuXhHEoNoxybmSrr5NwevTJ/n1a7yARz6+SE8QYWvPtd/MyHdeiBe5pzsONsy7vNA/dva9YE6ub6Uq2t6JmXXw8MtFxbrml27xa9Mn+fTs7t0Wc/sq1+9yaAe2EKughUlqrN+cuS9PmP3hO7rlF73aAkFxrT2HecotVBhRILxqSq1xBVA8lbVFuqdybc701eO329rusEAADiYxCe/LN6+3Bh/e4vn3uzJVgUxEp64cx/0/V3byZqR7vrN1YyCRYZyffmZlBdolLRSdTvjKpvlPR1QD/l4RxKwGhIhBXZc4M56ycdOW1LFhSdgj72ofeHBjsKxoQGFtIErrwF64ICG0lFZUp5gyszU2Xdfot/Ap33wlSaDF5Nwhu0kep3cuLy/hHHvdD4TVMLC24EnShWrW0GzpJcUKNOSMMYfMnDSRYAgHHFIDzZZy2Xii19uJ3fuT7wtUkWjFmurfZlgZnChEm0UpuR9NDOzbFXFHZvRicRd8U6VlZEHuXhHErAaEgEncQ++5FtgdlA7t2JJ2a26+C+7c2VDtq38fmP3hM7sBD15Vw/6bSsEPbphfOx01+jRGU3tQcvglbzslqbjvRujEBWtbaiAy9e0DMvvx67rd7jFHWhcX9XQeGwoOBGr08gUdsbxuBLHk6yAACMKwbh/sfAKRjfm7ze4/LphfP6nRgZRHmysmp1+63rmgvphCmXinrywR16Yma77/NxVpqLs6pZ3BXrWFkReZSHcyg1jIZEe22hoPo2QfN33cfdGjSVpaoKxrQEWeKcEGf3btGjh8/GKtj86YXzesqn5lAazoTRxITRys3wLKP2zJ6g4nVS/SKz3FZAO0iSuzJGsK3SGAAAIABJREFU0u6tG1tqERV9inW7bXGPWVCxvaDgxuzeLb5F0NKeQKK2F3Q88xx86fUxAgAA8cXtv/ZLPxbC8NvHwX3bfVdJC2rLwmJFT5+63NPC0v3yxlI1dBGdJAV7w+pFJalTGbfuVNL6VEDW8nAOJWA0RNpPYm5UPcmXx30+bSHgmaly4BKXbyxVe7p6QsEYrVq7tjJajHnT7Zk9fher5Rs3m+3Mwi3rJnT4P77enOftFvz2s3vrxtD2hgU3en0Cidre7N4tmn3+XEuhRqdgch18ycNJFgCAcZaXQXg/FsII2sfBfdt9V9oK2u+hY5eGMlgk1cs9ePtf7k3qXi+UkodiwEA/DPocSsBoSHVz0UtzgvUGggoBK7ZZKTD7KKmiU9D+e8s6+rU3Q1c7a+cNwLif5cCLF1oyhK4t1wLvevTCuzc7M4mCYl1PnbqsExevtFw8w4IbfnetTs7taT7+6OGzOnTsUuqLceQJqf1zDEFvZtAnWQAAMHj9CDCk3Ud7/65X5RyyUpgwWgno3LpDhKz7X8NYKgEYRpkFjIwx75f0ryX9aUmrkr5orf3HxpgNkg5LukvSq5I+aq29llU7RlU3F72kJ9g4y7e7ehE/KBij/feWdeRMJXFQ58TFKy0/u0W326eUhW236Exow+23Ni/ayzduhgat/IpVJ9Ee7Euaenv6tastxyqrpeMPHbvUsTpGbdVyJwcAcoY+GNApTv+32ylraYIYfv27bvuWvRB0g1hSYLBICq4hGibNcR/GUgnAMMqy6PVNSZ+01v73knZK+lljzHdLmpP0VWvtd0n6auNnJNRNVD1pIeCw5duzsGqtTly8kioDyO/zJ7lL40wY7b/3fbr+7s3mKmnv1lbkFPw/a8GYnlzQ3cLaOx7/iu6aO6q75o5q6nNfaSneFxQkfObl1/uyehl3ctbEKbIIAANEHwzwWFisaCKg37rJU9vysRfqi7V4V8pNco0P62MH9R0ef+lCRz8uz8GiKEkDNmmPex6KAQPjILOAkbX2TWvtf278+08k/Z6ksqQfl/Slxsu+JGkmqzaMsm5Wf0p6gg1bvj2LkNGmUjF1EKL98y8sVhK1sbZq9dSpyy0ZScu1Va2s2uYqc97tpb2Y+lmq1jqmzs0+f655wQw6JkFtqCxVexrUYMWxul50KAEgS/TBgDXudduvv+Tt/4Zl78cV1MfevXVjR99h9vlz+u6f//VEpRf6JW3/Nm7Axhs8++Sz51Idd1Y1A/ojywyjJmPMXZKmJL0s6TustW9K9Q6NpG/vRxtGTTdR9aQn2LBAQZxgwcd3btar8/ep6ER/3dzPkCYI4ff5e1U0cNVKk7esU6noxN6eG1jqJhOrtmKbF8ygYxK2/V4GNYblTk7W2T+96FACQL/QB8O4C8qUl+rX708+e053zR0NzEhPchMzqI/tlzlfW7GxV+sdFreui+7rt994CwpOxTnuM1NlnZzbo1fm79PJuT0Ei4AMZF702hjzHklHJD1irf1jE3PwbIz5hKRPSNLmzZuza+CQ6nb1pySF6MJWG7vve94bWWvIrSt0m1PwXVre5a6c4G47DncltaDP38vpUkkLEFrVp7i11/1Jyv0MQb+HCWO1EmMX1dqKHumiKHbc71w/lqwN0o8VUJiaB2BY0AcDoq/PUdk0UTcxgxYk8Xo0YIXhUbNUrUX2u8ICeF7jlsEO5FWmASNjjKN6R+Vpa+0LjYf/wBjzXmvtm8aY90r6pt97rbVflPRFSZqenh70VN5c6tfqT2GrjR05U9H+e8s6cfFK5J2ZpZCU23Kp2FztK+4KZoUJo88/cE/oMRj0ShPdBouktQum+zkff+lCS/py0ptT3QRRor5z/QjYhOnHCihJiywOMoAGYHzRBwPquukLRmVSR/V73D7AOP0RRfW74vwu8pjBDoyrzKakmfptrH8p6festf/I89SLkh5u/PthSb+aVRvQOzNTZd1+a2d8sVpb0YmLV3Rybo/KETVuwu4UuEGluHcdpPAVGlx+06jyqFR05Ez43/l1axEtLFY0M1XW5C3dx3l7MYXKb+rXoKdrBd1FrCxVezY1LcnUPOodARgE+mDAmjR9wbg1ccL6Pd4+wLgJW3k5KM+xYAy1iIAcyjLDaJekvyLpvDHGzcP8lKR5Sc8aY35a0mVJD2TYBvRQ1FQcvylT3oH07N4tevTwWd+7LO7qEUkvqlGZI+3TqPJ4h8eZMDpw/zZJ0qde+JrvfHbvHateTX3ybufTC+f1zMuva8VaFYzRxz70fj0xsz3wvUF31IKCff2arhV2F7FXmU5JpoP2I+MJAHzQBwMa2q/bExErgBWM0dcP/sVY2w7rGye5CTpsjMJXcgtbednvfUbS5z8aPmsAwGBkFjCy1v62FBhE/sGs9ovsRE3FiRpIz0yVdfq1q3r61OWWi4WRdNefKmr2uXOJ2xS3IJ7bhl3zx3N1p6dUdHTg/m3NtOWwdefcQEOvptm5v7eH/vnv6uTXrzYfX7H1leIkafrODb6/z6BASNAyrP2ahx5U50nqbaAm7nRQ6h0BGAT6YEAr73U7qvxBkhXCwvrGebzWr5909MfVm5GfsVwq6ur1d31rjxpJTz64Q4eOXfL97EZKvPKyVX9KFwBILvOi1xgdu7du7Aj2tE/FiRpIu1kr3u1YSb/z9aupsn+spLvmjrYEXsLM7t2i2efOxaotFBT8cB+PursSpugUOtJt49yJemOpqicf3BHa0SlMmMjpeu7vbWGx0hIs8nr65cstBc3jZDlFLVmbNfd4PhJQXLLfnbek9Y4AAEC23L7CJ58959tvCSqx4MevX+lMGM3u3RIYUIniTBitKl7phaTefidesMitK+rXZ7aq91l3b93YsfCNkfTQzs0twTnvjcfSpNNSh9O7TwD5lFkNI4yWhcWKjpypdGQG7b83eeHtExevdARaur0kLlVrmn3uXLzaMDEWiSmXivr8R+/pmPNupOa0rbhtLjoFfXznZpWKTvOx25zOP704wYxNpWLHkq1FZ0Ju+aOCMbql4P8BvY+6+w+rLWStAqdTxQ14lIpO3+ehz0yVI+tp9UuSekcAAKA/ZqbKvv28VNfo9m5X4+cktZO8m7hl3YRuDejLdaPoTETeMPV+/pmpsh78vver4LO6YmWp2lz4xu2PlktFPfngjubNYb86jm+/c1NO22czaq3XCSBfyDBCLH7ZL1bSU6cu68TFK4lWfkqT5bF+0tHb79RCVwSrrdqOKUftdzaWb9xULWINevdi6Z1iV1mqtmQUxU1XLjemcUnSkTNrF8Fry53LjsaZarZ768bme9xpbI+9cF7u9X/FWlVr/m3zPuruP83c+jhZTq7bb103kBTjqHpa/ZKk3hEAAOifXlyjDx271NGvrK1YHXjxgm6/dV3sfpZ3C9dvZFP36J2IZXXbs/Xdm8VBfV7vwjd+/MYOtVWrUtHR7beu6+hb93tlXQDxEDBCLGFBnqQn+CQ1eJyC0aG/fI+ketHi2mr0lC2XX2HmMKbRtva6SzNT5US1j/ymm+2aPx5Z/Dis/o7r6Nfe1ImLV5odm+vv3kxdULFaW5Ex9UwiP5POhG8BbjfLSYouJj6o+ft5CtTErXcEAAD6q9trdFA/Z6la01K1c+rVoHx852aduHglsC/78Z2bOxY7iVsqQeq8QTu7d0vosTlw/zbfKXssDALkDwEjxBIV5Elygg/K/th/b1lfPvdm8wK7ftLRZz+yrRmwiRMY8U45SrI6hTtfO0jcwEdQLaU4xY/bM5r8XFuuNed+96LwdVCwaNcHNuiB6c2B8/Ld9rpZTkF1AAZZq4dATfb8Oogc83AcMwCDMgrnn7x9hl4tRJIV78q3C4uVwNWKv3yu9Ybk7N4tsT6Xu8qx38q5dxSdwKBZHlbWHXZ5+1vA6CJghFjiZL/EPcGHZX8ELeUeZ9veYEaS9gRNVfKeiIOWYC0Yo1VrI0/UUcWPO4oChlxk41g/6WjylnUtU/H8igwGvffpn/lz9XnkAfPyXW4nIShd2Z1Ch9ET1EGUSCUPwjEDMCijcP7J42fwWxBmkMoh/dGZqXLgoiDejKjKUjXWysVu/zlo5dxqbSVwgZg8rKw7zPL4t4DRRcAIscTJfklygk+a/RF1B6foTOjgvu9p2WbQe9y502ER+fYTsd8FzZkwes9t67QUIxATlFW1e+tG7Xj8Ky3BIbfNE0ZKs0BG0Sk0M7OCPk8Y9/MEzcv3ZpJFZXGduHgl+QfAUAjqIJJKHoxjBmBQRuH8k6fPsLBY0eMvXfC9GXf7LYVEdYhKRUfv3lwN7E85E0ZOwfiWCfDa9YENevWPqnrk8Nlm5nd7AKkcMyMqqji2d7uPBgShpPBFbVasVdEpDLze5DDK098CRh8BI8TWXmi5nyf46AynzhUcgoI0flPG2kUFQkpFR9c9WTtRkX2/rCq/5Ui94gaL2rOJ/AJgUcvNe7mBvzjT6KKyuAaVVjyKabppPlOWxyHO9wOtOGYABmUUzj95+QxRN+GWb6zImTAtQRe39EJ7v8/tl0prfcTSpCNrpbeqNRUb9SSjAjiSdPLrV5v/dm90tvdP48wYiPLq/H0tP6edlucGndL0U0axn5dEXv4WMB4IGCGxQRQUjspw8ouqd9PO8Gym+hKp7dk3UZH99qyquHWZwvhlEwWZmSqHZohJ9bCbG/iLmkYX9hq/1/rJ4oI/imm6aT5T1schzvcDrThmAAZlFM4/efkMUTcVrSSZ+s3Ft6q15k3CExevtEzFas/+8ct2D8veicvbP/XrGycpW1D2OdZpg1DLN25KUmgNUT+j2M9LKi9/CxgPE4NuAIbTzFRZJ+f26JX5+3Rybk9fTtDuPjtzier8oupp2rmwWAnch1S/8AbVF0oS2e/mLoBR/aLdvhpblNm9W5oBLz9Waxdbv9e2Z5KFbS8q68y94Fcaq6y5F/yFxUrsz+MnLE13WKX5TFkfhzjfD7TimAEYlFE4/+TlM8Tpv9VWrG6/dZ1emb9Ps3u36MiZSnOA707FirpJdujYpZ7VRmpfZMXtGwcdO3canFfQsZ6ZKuvgvu2+waQw15Zrqfp9o9jPSyovfwsYD2QYYehkHVXv5gIdtw0Li5XAQtpR1k86WvzMhxO/T1oLBgWtaua92MfJ0GrP/HLvmpWKjoyRHj18VoeOXfLtFGU1/3oU03TTfKasj8MgMg2HHccMwKCMwvknL58h7hQs93obt7/TnnXdy9XXJozRwmIlVn1Ld8Vft+1xjnVY2Yow1dqKHgnpK/oZxX5eUnn5W8B4IGCETGQ5tzioNlGvoupxLjjrJx29U1tN1YaolcWipHxbk/t7iHMM4xQnb3+NX6rwo4fP6vRrV1tWwcvqgj+KabppPlM/jkPS4vVxjHpdgiyOGQDEMQrnnzx8hrhTsNwgTZz+jl/fqZdWrNXs8/WVz6IWLrn91nWB0+SixFkkx4+bZX76tas6cfFKaB9gFPt5aeThbwHjgSlp6Lmsphq5vKmvaadmhYm64Lh1g9K2IWrue5S3AqbDBVlYrGjX/HHdPXdUu+aPN+8wZXUM/T6flfT0qcst34Gg4+x93K/tUUYxTTfNZxrG45D1uQMAMJzS9Aey0j4FywTUMVixVo+9cF6lScf3eW9/J03f0CmYeka36v24j+/cHDotrLZi9fhLF5o/Z3Xjzp3ylnSKWrW2oqdPXY7sA/j1b5wJo+UbN3Px/QBGDRlG6Ll+LPWYNKoelrXQ/lzY6mUFY7T/3nLqOy9SbzJo4ooqDNieGbTj8a806zOtn3RiF9T2Cvp8Vmr5DkRliqUtajiKabppPtMwHgeWiQWA0dRN9mgeixz79aH8pvvX29yZGu4UTMsNnLC+YcEYrVqrOxrT/ZeWa5HH8K65o76Pe4tbd5OpE+f3Obt3S6zVeb3aj1ScRW3uSLhyMYBkCBih5/I2tzisoyGp47kjZyraf29ZJy5eUWWpKqO1C9iKtTpypqLpOzekvgh1My/du4pZHEnmzc8+d65l2dZry7WO9OU4wj5fe9FFt41+HY5uggejmKab5jMN23HI27kDANC9bgM+w3AzYWaqHLiiWbW22vHYympraCSs77RqrV5pW8reyy94E0faEg9xf58zU2UdePFC4EIxcQUtauPua9f88Y595O37AQwzpqSh5+JMNeqnsI5G0HMnLl5pptMG3e1IK2qlsiBG0kM7Nye6+MUdgB86dqklWOSqrdjEn3V275bAVebavwNhq9gRPBg/eTt3AAC61+2qVsPSH0hyrVq1avn8SfpOXkFTuYuO/xCvVFybHpe2PEGS3+eB+7cFfq72x9N8fml4vh/AsCJghJ7LW+2UsAtJ1EUmi4uQe4EuBE1691EwRg/t3NxSNDqKuxKbHyu1zPFOs9pWkJmpsh7aubnjwp/0O0DwoHtJaj7koT5E3s4dAIDudduX6nd/IM31cGGxomvX3020n8pStbmfQ8cu6c9/YEPsvpPbxkcOn/UN3tzmFORMtG7NmTDN1c9c7o27Jx/cIam+um3UZ07y+5yZKgeuPGyllmDVQzs3p+oD0F8EskXACD2XdVHqpMIuJFEXmawuQjNTZa1GLHfmvcy7U+HiDuLjrMTmLSYY9nmCijWGeWJmu558cEfLnazbAu52BelV8CAPgZBBSFJAOi/FpvN27gAAdK/bvlQ/byakuR5+euG8Hjl8Vss+U88mQ/o+prF9dz//+fJbeqhRuDrsGuhtY5Cl5ZoOPXBPy7YOPXCP7/U06WdO+vsMKn7t7SNK0vSdG1L1AbjZBGTL2G7X6O6D6elpe/r06UE3A0Oqfa61VL+QHNxXz9Zpf86d+vXEzPbQ93Y7iN01f9z3Yu9eWIOeOzm3J/W2/ZQb892DChOWio4O3L+tozB42LKnC4sV33nrSY9dt0usZ/n7y7uw71f7dyjJa4GsGGPOWGunB90OtKIPhm75XYvd+pDlmNf2bvsDcXkX//AKuh4uLFb06OGzgVk06yf///buP8ius77v+Oer1QWvTGMZMNRZY+x2MnZqNJFAJW7VYbAJmAQwwgSMCx3SYSaZDLTgOm6UTie2WzKoVYjTmU4zQ4FgigsSmAgTtwgGmYZ4YhqZlQKqLZIGbLw4WIlZU9vreC19+8fes7r37vl9z4/n3PN+zTBYd3fvPud5zj3Pd58f32egJ55+Nnbbf5w8/W6eGK9I/73j3315LBl21nsUja3ivn+wySRbS32Q5z3i3rNIXAogXVoMRtJrzLys5MpHHnxMt9/70Hpn79KGxNZ1BClpyQaTEifmXb5dZBtZ1vcur6xuSG74qXsfWv/6ZLLDuMAgUjQJ4bRJm7uQKLMuRZaMs/8fAFCX0Vhq8jCRIieg1t1vH1xcSkzQnNQf7jt0InGwSFpb6XPrtdtzJ3/O0+9mfU+R1TUHF5diB4vSfk/R2Dju+58aOdUskjc+i0u6fcd9S72YDATawIARglfFrFJaoHH3AydTj/HMG6QULWdahxsFVZPyLt8uchLbOfODsVPjJs2ZxQ7+jBqtr7hBmlHTDEIUreM+D4QUOS53mqN1AQDIEsVScatjQpnISUvCndQfZsUTP7l1fv26kibT8vyeye9JivHyrtiKlLlmaWMMe8sXj+vmO4/r8ZXVxBU/o6uVLt5zV+z75onPsiYDm1qN1oRZuhZ0FwNGCNq0R7HmUcWgQtlyJg1GlT3qNHLFpeeNrQKKbLK1kzlG39NMiQHMYM7Glgunieora6Cq7CBEmTru80BIkXto2vsNAIA8Qp7ISStDUn+YNngzmLP1n8uaTItccel5md+T1Gcn5TtKG3Aoc83R+46WYXS1UNZKdGm6+CztHmri74amzNK1oNtIeo2gTXsUax5lkjFOJlK+5YvHKy3ntMl/737gZOzr58wPNrzncsJSZEk6lXOwSDpTX2mnv+UZhEhKUl3mXuhzIsQi91Bbyab7mpAcAGZZ2rM95BOtkspw7pZBYn8YF2dIa8mu9/3imSTTeQfE7vqzRzL7xbx9dlwy6+v3H9VFI++ddM1m6Sem5R0Ai0zGa9PEZ2n3UBN/NzRllq4F3cYKIwStiZmooqsr4kb8k0xTzmn26yeVafmpVS3+5uvGXkva/iZJG8/7SP+du/YeTj2ZLWsQIm02pcy9UGcOqi4ocg81kR9iVBUzZ11dqt3VcgNAlqxne1zMZcq3sqaOsk4mTr7jvqUN8eBNb7os8T0m44ytWwZylx5fWV3/w373joXcqQJ+9NTq+mqdtH4xT58dN+AwmTvqra9Y2HDNkhSFckllKBPfRnFiVN9vfcVCqUTVdeYADUnIq/HQL6wwQtCamIkqurqiyKxK3TNmcbN4BxeXlLTGJ648SbNjZUTJLOMsjOzjj3NwcUk3HDiWOJtS9l7YvWNB9+y5Ut/d+wbds+dK/jAPxLQzZ2WOPg5BV8sNAHlkPdt371jQW1+xMBYrRIeNNPkcjHsW33Hfkt76ioXCq22jOOPWa7fr6dXTWl5Z3fB8LxtrlVlREsWGWQNUK6undPcDJ8di4LhV4nFlKBPfmrShvm+86pL1+ExSrlXHaXF73lixCyucQ16Nh35hhRGC1lRulSKrK/KO7Ne99SlpFu+swabYEztM8fvRo+u+4cCx1NVBebk0dgKKlF0X0bUk/f4fLK/o1mu3dzrPDqtKxk07c9bVE/C6Wm4AyCPPsz3rsJEmJD2L737gZO7j6PO+575DJ9bfM4oDzpkf6Mlnns2VJ3KanJp53ns0Br4oIRn15OBTXHyeZjIulDYmqi6y6niaHKBdyQ1EfkmEggEjBC3ELUVJy4q3zg909nM3V17OpIGGpMAkqfN2re1H33foxIayFTnBIw/X2oxP3rrIWrU1espISPdC3kGgrgQnSeoY7Jo2IXlXl2onlW9peUUX77kriPs6DgOeQDw+G+POmR/EHh8/+mwP4fmd9izetfdwoXaM7oGkFT3R75oc5Ji8d57822cz6y5L0dxC58wP1reJbd0ySPy+yZVHkzGZ7Mw2tkkLKdvxoropOpmS9LnLEyt2ZeImxLgX/cSAEYLXdG6VLEkj/jdffVnl5SyT0yfN6BJpSbGDRmmzX4NNJpkyZ8QWts4XmqFLu5bR2ZS0e6HpoL3IIFBXgpM4dQ12TTtz1tUT8NLyWKR9PtvU9QFPoC58NsYdXFzSk888u+H1wSYbe7aH8PxOexbnacfRQaK41TOTvytO3ADSNP3iwcWl1G1ok+UcbDI9+cyZQarRk84mxa0AHy1/UtmjrWJJW+SiuikyiJj1ucv6uyGEAcu8QvsbCP1EDiOgoCZPlEobaEgKQLbODzL3yUfvMbmHW9L6Pvyzn7tZq6d8fVZpYeu89r3tZ3TtP3xJ6nuXWS6bdC1zZut1m7bfvI28MEVy8IQUnBTdt1/XKR3Tfo66egJenjwWoZ2CwkktQDw+G+P2HToRO6H0vLM2jz3bQ3h+33jVJWuTYAnS2nE05pDSB4uKXFfRfnG0P99+y5d14+eOJb73wtZ53Xrtdi2MxFurpz3Xljgp/QTcPGXPavMiuYfS8l2Ofl8XT+oDQsQKI6CEpkb80wYaknL63Hz12mke0WqbpFAgGlSZnKE58uBjYydmnHJf79SjrXBpygyeJa02GR0sSptNSgraP7D/qD6w/6i2zg8qXwGWNjM5KYTZVKncbHjWMvJpTPM56upS7clyJ30+Q5rpDGnAEwgJn41xSde9PLFyJZjnd/oYSOL15N32tVDiuuJWHY2eLBa932R/HreVLTIawx158DF96t6HcpcnkifHZVqfntXmRXIPpeW7HP2+0Vjnxs8d0813HtfjK6s6Z36gwZyNDZZ1YcIJaAsDRkDA0gYakjrfydeS9sTPmcUOssQFEqPbp9IC4awZqCRZgUTWlq6s4Hx5ZVU3fvbY2O+q02Rwd8Wl58XWa9PHCJfJEZC01D6EmbiuLtUeLXfWMv0QhDLgCYSGz8a4IvVR1/M77/b0pNVQo5LaMc+A4OTW/DLb5tMmeYrkKhqdyPv0N76f62cmLRS8p7NyDEVfv37/0fWvf+iabYVzD42K2ivu+1ZP+XosvLyyqsEm07lbBlp+arUzE05AWxgwAgKWNeOStf99aXlFgznTYJNp9fT4TErR5NZRgJS27/+Ue678DVmBRNLvLlOmyOppbyxnUFSW0ZPr4tz9wMnayzKq6Gz4vkMnCp24h+K6cApKF8oItIHPxri266PIKtqsQZ+0cmfFHFWdypU2yZN3FdvCyASjlG+l0KSibRh3vdcPV3wvbJ3XFZeeN7aSPaqPD12zLTX/Zd58l3nqZvW0a8tzNmvxN1+X+7qAvmLACAhY0WXbSbMq0trqn1Pu60uk0070iBPN3GQdpRq3YmV0gGjrloGeePrZ9QGsPIFT1qxl3uNdi24TGC33OfMDmWl9NioryWUk7eS6prctFJ0NTyqfq58JXesQzNaMFF0oI9AGPhvj2q6PIqto0wZ9sraSxcUcUUwQrd6Otu+nbZu/5YvHSyVnXlpe0blbBqlJqqX4gZ4oFiyiaKqBuOuNfuPS8opuv/ehDfFTnoNAktpsNN9l2vdN6uvWUaAoBoyAwBVZtp3W+Z1yl2ltG1T0fnkGWaSNq5ok5TpCVto40xQX4GQFCnlWWmWVSSq2TSAtP8DS8ormNplOnS4+U1e2PFUoOvubFHQVXZqOdF3YWteFMgJt4LMxrs36KLKKNit3Ypq4gbGkVTNp5frRU6s6uLhUeLJMkp54euNpdKNM0ltfsbEtrvvZl8RukT/7OXN68pmN8WC0QqnIlrqsgZiyufvytlneScS+bh0FiuKUNGCGZHV+Lun2ex9aD1A+dM22xLxDc2aJp3Ts3rGge/ZcmThwMFqOvPvs0wZ68pwcEpXpd6/drsHcxmuaPNY3S1a5T512nf2cufX6mzPTfMLWs7iT66KBmqLTJUSTAAAYoklEQVSnlk2j6AksIZxkAwBAHkVOv5rmRLLRU2W/u/cNumfPlbr7gZOFT7WVlHqQSNqpmqunXVsGmxLzdrvit71/cPc2vevyC8dil3ddfqF+6y3bUuOUIifRlh2Iyfq5vG02+X3nbhlsOBGPWAbIjxVGwAzJM6vi0vpqnqSVRnln2fKsWMm75DctYXaRma3o9Vu+eHx9NVOZU9LylPupZ07pu3vfMFbOPCfXjSYoL5PXYBpFZn/b3l4AAEBeRVfR5u0P8+QgyjrV9gP7jyZ+PUn03kk/u7J6utR7f3D3Nn1w97bYr8X197v2Hi50YEaeWHRyW3/eAZy8bRaX45NYBiiHASNghuTdmjUaREwzKJDnZ/PuJU/aU18mWWQVS+LzlHtyNiyrPibLlBSE3XDg2NjJIW0GNWy3AAB0wWQfHOUevH7/Ue07dKJ0f5onN1LWqbY333k89sTaPKtqkmK66L3Tvl5EUn9f9MCMrIEuSXrn5Rfq7gdONjaAQywDlMeAEQphhD58Uad4cHFJ1+8/mutI9Gk60qyfzbuXPGl7W9Gj4KuSVe7RpdqTn4nJo3R37T0c+5lJCraiwbMmVhw1jWcIgFnCM+2MEOpiNAaqagVvngGTrNVNN199WekT5LLeO+nrV1x6XmL8UUTRAzOktTq+4cCxxMnAJgeLAEyHASPkVmXni/zKBmC7dyzoyIOPbTiNIi5AqTPIm5zxmzwlLalMkaIzW1VJmqmMTknLs6Us6zOTZxVTE4NjTeEZAmCW8Ew7I7S6qHKyKamv3mSmi/fctR4TfOiabZkrjOtYzV00CXfe649iw6XllVJbyNJOY4vqs+37BEA284JHK7Zh586dfuTIkbaL0Xu79h5OPDFpdEUFqpOUE6fIEadZg0FV/I6iigxQZd13bc5oZpUtT9nzrL4yaSxXUlfxDEEaM7vP3Xe2XQ6MIwZLxjPtjNDq4uI9d8WusI760yKxQ56+uu64qahp2yPumqNBo4WcsVZSGeL08TMDhCQtBmOFEXJra6VHn1UxQ5a1ZayNLV9FtsClLcVue0Yz6d5fWl5JDZSin5ucFdxkFjsjNytHv/IMATBLeKadEVpdpG2jKho7xB2mMSm01cDTtkdcbBgNFuUd2MmbkqBIuQA0L/4MaCBGkeNKUY0mArDQgrxJaceopg12jarr6Pq0ez9awp31c7t3LKwfzfvht//MTB9jzzMEwCzhmXZGaHURdyR91J/mjR0mPb16OvXrocRN0nTtcXBxKXPCK4+4+O3cLYPS5QLQDgaMkFta54vy0gYzmgjAQgvy4owOqtyz58rMpNHRCp+Di0vrM4lLyytynZlJrGLQKO4zMcqlDYNGWUf8Jg2OzQKeIQBmCc+0M0Kri7T+tMxEWdwg06SQ4qay7RHFTEnKnLw2Gr/d9KbLUstV1wQfgPLYkobcpknYh3hZy6KzTsaoQhO/oy5pSaOjujxrsKm2LXejn4mkcrikueFWszz7/mf56FeeIQBmCc+0M0Ksi6T+tMypX1kra+qIm6bJ0Vi2PdIGxgZzNvU1ppWr7TQDAOKR9BpoUZ6khE0kdQ7hKNwy8iaNjlMm8WWarOSOoSXErEJX7xuEiaTXYSIGmz19f3aXOewjrY/PmwQ6b9nSTiarO45IShYuSVvnBzp60+tq+92hJU4H+oSk10Cg8iyLbmLFyeSMT7SPP/QAMs8KnyRlEl+myUru2HZCzKr/QGAmEAC6p0/P7qR+r8zqm6TV2FUO4Ey2zeTATRNxRNrK7cdX4hN+VyXknJp9H2RFv9U2YGRmH5f0RkmPuvvLhq89X9J+SRdJ+p6kt7v7j+oqAxC6MsuiR1XVgXU5gIyCv6SZqa3zA/3ts6c3HA27tLyiGw4c23AqWdmALM/gVVtBTx3t28bpehECNyAdMRiS1PHsDvGZnNXvFZ2Ma2LLXZ48SXXHETdedYmu3380dpXRJjMdXFyqrW2njYnr0uUYGahCnUmvPyHp9ROv7ZH0VXf/KUlfHf4b6K1pkkRWmcy57IkhIUmqy5uvvmw98aWksSXecUfYS+UDsii540JCcNNW0FNH+7Y1E1hnEnNghnxCxGCIUfWzO9Rnch39XtIBHFXJ0wZ1xxG7dyzonZdfGHvK6yn3Wts2tMTpkVmIkYFp1DZg5O5/JOmxiZffLOm24X/fJml3Xb8f6IJpTsWqsgMLeRlwXml1OTqQkydr27QBWWhBTx3t29bpegRuQDZiMCSp+tkd6jO5i3FNVhuY1Egc8cHd23Trtds1ZxuHjeps21BPiu3ivQRUqekcRi9290ckyd0fMbMXNfz7geCUzVFUZQdWdBlwiMvPpey6zFM3VQzsNLF0vUgb1LHMu63T9QjcgNKIwVD5s3uaZ3KdsUSo25vSZOVCdDW3BWr3jgVdv/9o7Nem7W/T2j3Ek2K7eC8BVapzS9pUzOyXzeyImR05efJk28UBglPlLGGRFTGhLj/PI6lu5swqn80aXbp+41WXaN+hE7p4z13atffw1HVVtA3qWPHU1kxgWyubgD4hBptdVT+7yz6T644lQlvpm0fUNnEreyQlbnevyzT97cHFJe3ae3hD3NPFGLKL9xJQpaZXGP3QzM4fzmydL+nRpG90949I+oi0dqRrUwUEuqLKWcIiK2LaTHY8rSZOOZkUQsLpulY8tTET2NbKJmAGEINBUrXP7rLP5LpjiSZW+tYhKl8I/VzZtk2Le7oYQ3b1XgKq0vSA0Z2S3i1p7/D/v9Dw7wdmRtUdWN4Asstbgtro9OsIjsq0QYjLvMsgcANKIwZD5co+k5uIJbra74XSz5UtR1rc09UYsqv3ElCF2gaMzOzTkl4t6YVm9rCkm7QWpBwws/dIekjS2+r6/UAftNGBdX0vd9N1VlfC6S63wbQI3IB0xGBoUplnct/7sSyh9HNlypEW99DuQPfUNmDk7tclfOk1df1OAPULYUtQqEm347SdcLpLdZXXLF4TUCVisO7qy/MthFhiFlR1v1R536XFPbQ70D1Nb0kD0HF1L5XOClrqyAlUpzqCo7xtULSuuvCHStfaHwDy6tPzLZRtV0VU2UdW8V5V3S9V33dpcU8X2x3oO3MPP5fhzp07/ciRI20XA0DN/u3Bb+n2ex/S6FNpMin1rr2HY2euFrbO6549V1ZepqqCutH3uOLS83T3AydrD5aK1NVkwCjVnxC8jKbbf1pdGIQLhZnd5+472y4HxhGDNadrz7eumeZ5XGUfWfa9Jsv/2JN/q5XV0xu+r+j9Usd9F3LfF3LZgLakxWCsMAIQhIOLSxsGi6SNCaKbTJhY1azbaA6AJmeQi9RVmyeXFAneupQws0+rBQBMr0vPt7rU9cf8tM/jKvvIMu8VV/4kRe+XOu67UHIwTaJfBorb1HYBAEBaC6CS1juOBi1JuX/qSJiYFtSF9J5JitRVW3+oRMHb0vKKXGeCt4OLS7Hf32T7T6vJtgbQfV16vtWhaH9QxLTP4yr7yDLvFVf+JEXvlz7dd/TLQHEMGAEIQlqgNBq03HjVJZofzI19va6EiXUMojQ5MFOkrtoKGIsGb022/7RYLQCgiC493+pQ5x/z0z6Pq+wjy7xXkX6j6P3Sp/uOfhkojgEjAEFICpRM48HP7h0L+tA127SwdV6mtT32deXZqWMQpcmBmSJ11VbAWDR4a7L9p9WnWVsA0+vS860Odf4xP+3zuMo+ssx75S3nuVsGhe+XPt139MtAceQwAhCEuFM1TNI7L79wQ9DS1N74Ok44q/I98+R6yFtXbZ1cknb8bpIq2r+JpJccHwygqFBzv1Ql7dlbpj/Ia9rncZV9ZJn3iiv/pPnBnG5602WFyxOVaVbvu9F77pz5gQZzptVTZ5Ig0C8D6TglDUAw0gLJtk61qOP31nGcrhTmqWZSdruWvY6y9dhk3XEaS36ckhYmYjBUJevZW8WzOcQ4oiptnbhatnyT5Wmj/uPuqcEm0/PO2qzlp1aDqDcgBGkxGANGAILXpcGRSXUFSF05fjlP25Wpo2nuia7UXZ1C/MOJAaMwEYOFL8TPc5w8z95prqVMv9CVugtdE4OBZdDfA/mkxWBsSQMQvDaPfJ9Gnce3diVxY562K7MUfpp7oit1VxeOFQZmR5c+z3mevdNsjSraL3Sp7kKXVfdtxXF97++BKpD0GkDwutrh13niS1cSN9bVdtO8b1fqri4cKwzMji59nut+9hbtF7pUd6HLqvu24ri+9/dAFRgwAhC8rnb4dQZIXTkGt662m+Z9u1J3denqACyAjbr0ea772Vu0X+hS3YUuq+7biuP63t8DVWDACEDwutrh1xkgdeUY3KJtd3BxSbv2HtbFe+7Srr2HdXBxqZL3HdWVuqtLVwdgAWzUpc9z3c/eov1C6HWXtz8MQVbdtxXH9b2/B6pA0msAndDFxJRdTtZdpbxtV7S+unhPhCDU+5Kk12EiBgtbqJ/nthTpF0Kuu5DLliTEU9IA5MMpaQDQEgKk/DjNpDkh3pcMGIWJGCx8IX6euyLUuqM/BNAkTkkDgJZMc+JL35BPojncl8Ds4PNcXqh1R38IIBQMGAFAj4Q6myqt5Y2Im1ENJZ8EAABNKNMfhty/A+gukl4DQE9EORGWllfkkpaWV/Qbn/9WMIk0u5rcHACAKpU5MCLk/h1AdzFgBAA9se/QibEEmpK0snpK+w6daKlE4zjNBACA4v1h6P07gO5iSxoA5NT15d5dyImQlU+i620AAAhX1X3MNO9XJL9SF/p3AN3EgBEA5DB5xG203FtSZwYsup4jaBbaAAAQpqr7mCb7rK737wDCxZY0AMhhFpZ7dz1H0Cy0AQAgTFX3MU32WV3v3wGEixVGAJDDLCz3jmY0u7qlaxbaAAAQpqr7mCb7rK737wDCxYARAOQwK8u9i+RECM2stAEAIDxV9zFN91ld7t8BhIstaQCQA8u920cbAADqUnUfQ58FYBawwggAcmC5d/toAwBAXaruY+izAMwCc/e2y5Bp586dfuTIkbaLAQAAamJm97n7zrbLgXHEYAAAzLa0GIwtaQAAAAAAABjDgBEAAAAAAADGMGAEAAAAAACAMQwYAQAAAAAAYAwDRgAAAAAAABjDgBEAAAAAAADGMGAEAAAAAACAMQwYAQAAAAAAYIy5e9tlyGRmJyU9Kemv2y5Li16o/l5/n69d6vf19/naJa6/z9ffx2t/qbuf13YhMG4Ygz3Ydjla0MfPYJOo33pRv/WjjutF/dZrsn4TY7BODBhJkpkdcfedbZejLX2+/j5fu9Tv6+/ztUtcf5+vv8/XDoSAz2C9qN96Ub/1o47rRf3Wq0j9siUNAAAAAAAAYxgwAgAAAAAAwJguDRh9pO0CtKzP19/na5f6ff19vnaJ6+/z9ff52oEQ8BmsF/VbL+q3ftRxvajfeuWu387kMAIAAAAAAEAzurTCCAAAAAAAAA0IfsDIzF5vZifM7C/MbE/b5WmamX3PzL5lZkfN7Ejb5ambmX3czB41s2+PvPZ8M/uKmf358P/PbbOMdUq4/pvNbGl4Dxw1s19os4x1MbOXmNndZna/mR03s/cPX5/59k+59r60/Vlm9r/N7Njw+m8Zvj7zbS+lXn8v2h8IjZnNmdmimf1h22WZRX2LbZtmZlvN7HNm9sAwrvhHbZdpVpjZJSN98lEz+7GZfaDtcs0SM7t+GAt928w+bWZntV2mWWNm7x/W7/E892/QW9LMbE7SdyS9VtLDkv5U0nXu/n9aLViDzOx7kna6+1+3XZYmmNmrJD0h6ZPu/rLha/9R0mPuvnc4aHiuu/96m+WsS8L13yzpCXf/7TbLVjczO1/S+e7+TTP7O5Luk7Rb0i9pxts/5drfrn60vUk6292fMLOBpD+W9H5J12jG215Kvf7XqwftD4TGzP6VpJ2SfsLd39h2eWZN32LbppnZbZK+7u4fNbPnSNri7sttl2vWDP9OXZL0s+7+YNvlmQVmtqC1GOgfuPuKmR2Q9D/c/RPtlmx2mNnLJH1G0islPSPpS5J+1d3/POlnQl9h9EpJf+Huf+nuz2jt4t7ccplQI3f/I0mPTbz8Zkm3Df/7Nq39IT2TEq6/F9z9EXf/5vC//5+k+yUtqAftn3LtveBrnhj+czD8n6sHbS+lXj+AhpnZBZLeIOmjbZcFKMrMfkLSqyR9TJLc/RkGi2rzGkn/l8Giym2WNG9mmyVtkfSDlssza35a0r3u/pS7Pyvpf0l6S9oPhD5gtCDp+yP/flg9+iNqyCV92czuM7NfbrswLXmxuz8irf1hLelFLZenDe8zsz8bblmbyW05o8zsIkk7JH1DPWv/iWuXetL2wy0gRyU9Kukr7t6rtk+4fqkn7Q8E5Hcl/WtJp9suyAwjtq3P35N0UtLvD7dVftTMzm67UDPqHZI+3XYhZom7L0n6bUkPSXpE0uPu/uV2SzVzvi3pVWb2AjPbIukXJL0k7QdCHzCymNf6Nuu6y91fLunnJb13uGUJ/fJ7kv6+pO1ae3h+uN3i1MvMnifpDkkfcPcft12eJsVce2/a3t1Puft2SRdIeuVwyWxvJFx/b9ofCIGZvVHSo+5+X9tlmXHEtvXZLOnlkn7P3XdIelJS73LA1m241e9qSZ9tuyyzZDgx9mZJF0v6SUlnm9m72i3VbHH3+yX9B0lf0dp2tGOSnk37mdAHjB7W+IjXBerZsjR3/8Hw/x+V9Ada26bXNz8c5niJcr082nJ5GuXuPxz+MXla0n/VDN8Dw/wtd0i63d0/P3y5F+0fd+19avvIcOn817SWv6cXbT9q9Pr72P5Ay3ZJunqYY+czkq40s0+1W6TZQ2xbq4clPTyySvVzWhtAQrV+XtI33f2HbRdkxvycpO+6+0l3X5X0eUn/uOUyzRx3/5i7v9zdX6W1VCiJ+Yuk8AeM/lTST5nZxcOR3HdIurPlMjXGzM4eJsDVcDnp67S2jKxv7pT07uF/v1vSF1osS+OiP5iH3qIZvQeGiX8/Jul+d/+dkS/NfPsnXXuP2v48M9s6/O95rQUMD6gHbS8lX39f2h8Ihbv/hrtf4O4XaS3mPOzuzG5XiNi2Xu7+V5K+b2aXDF96jaTeHBbUoOvEdrQ6PCTpcjPbMoyNX6O1vJ6okJm9aPj/F2rtgJnUe3lzE4Uqy92fNbP3STokaU7Sx939eMvFatKLJf3B2udFmyX9d3f/UrtFqpeZfVrSqyW90MwelnSTpL2SDpjZe7T2IHlbeyWsV8L1v9rMtmttO+b3JP1KawWs1y5J/0zSt4a5XCTp36gf7Z907df1pO3Pl3Tb8MSRTZIOuPsfmtmfaPbbXkq+/v/Wk/YH0B+9i21b8C8k3T6cbP9LSf+85fLMlGHel9eKPrly7v4NM/ucpG9qbZvUoqSPtFuqmXSHmb1A0qqk97r7j9K+2dz7lhIIAAAAAAAAaULfkgYAAAAAAICGMWAEAAAAAACAMQwYAQAAAAAAYAwDRgAAAAAAABjDgBEAAAAAAADGMGAEoFZm9kTMa5eY2dfM7KiZ3W9mHzGzq4b/PmpmT5jZieF/f3L4M28xMzezS4f//sbw6w+Z2cmRn72o2SsEAADoFjM7NYybvm1mXzSzrcPXLxrGW/9+5HtfaGarZvaf2ysxgDaYu7ddBgAzzMyecPfnTbx2SNJ/cfcvDP+9zd2/NfL1r0n6NXc/MvLaAUnnS/qqu9888vovSdrp7u+r8zoAAABmxWh8Zma3SfqOu//WcOLtq5J+7O47hl//VUm/IumPibeAfmGFEYA2nC/p4egfo4NFcczseZJ2SXqPpHfUWzQAAIBe+RNJCyP/XpF0v5ntHP77WkkHGi8VgNYxYASgDbdKOmxm/9PMro+WQafYLelL7v4dSY+Z2cvrLyIAAMBsM7M5Sa+RdOfElz4j6R1mdoGkU5J+0HTZALSPASMAjXP335f005I+K+nVku41s+em/Mh1WgtcNPz/62otIAAAwGybN7Ojkv5G0vMlfWXi61+S9FqtxVz7Gy4bgEAwYASgFe7+A3f/uLu/WdKzkl4W931m9gJJV0r6qJl9T9KNkq41M2ussAAAALNlxd23S3qppOdIeu/oF939GUn3SbpB0h3NFw9ACBgwAtA4M3u9mQ2G//13Jb1A0lLCt/+ipE+6+0vd/SJ3f4mk70r6J82UFgAAYDa5++OS/qWkX4tisxEflvTr7v43zZcMQAg2t10AADNvi5k9PPLv35F0gaT/ZGZPD1+70d3/KuHnr5O0d+K1OyT9U0lfr7SkAAAAPePui2Z2TGsHi3x95PXjko63VjAArTN3b7sMAAAAAAAACAhb0gAAAAAAADCGASMAAAAAAACMYcAIAAAAAAAAYxgwAgAAAAAAwBgGjAAAAAAAADCGASMAAAAAAACMYcAIAAAAAAAAYxgwAgAAAAAAwJj/D60p9c7xRnPjAAAAAElFTkSuQmCC\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 查看部分特征与price的数据分布展示 \n",
    "plt.figure(figsize=(20, 5))\n",
    "\n",
    "features = ['LSTAT', 'RM']\n",
    "target = dataframe['price']\n",
    "\n",
    "for i, col in enumerate(features):\n",
    "    plt.subplot(1, len(features) , i+1)\n",
    "    x = dataframe[col]\n",
    "    y = target\n",
    "    plt.scatter(x, y, marker='o')\n",
    "    plt.title('{} vs price'.format(col))\n",
    "    plt.xlabel(col)\n",
    "    plt.ylabel('price')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 简单实例：单变量预测价格"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = dataframe['RM'] "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "y = dataframe['price']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "history_notes = {_x : _y for _x, _y in zip(x, y)}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "24.0"
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "history_notes[6.575]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "[23.8, 24.0, 24.8]"
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 寻找与RM：6.57最相近的前三个价格，\n",
    "similary_ys = [y for _, y in sorted(history_notes.items(), key=lambda x_y: (x_y[0] - 6.57) ** 2)[:3]]\n",
    "similary_ys"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "24.2"
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(similary_ys) # 计算三个的平均值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 用历史数据来预测未曾见到的过的数据，最直接的方法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## K-Neighbor-Nearst"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "def knn(query_x, history, top_n=3):\n",
    "    sorted_notes = sorted(history.items(), key=lambda x_y: (x_y[0] - query_x) ** 2) \n",
    "    similar_notes = sorted_notes[:top_n]\n",
    "    similar_ys = [y for _, y in similar_notes]\n",
    "    \n",
    "    return np.mean(similar_ys)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "15.700000000000001"
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "knn(5.4, history_notes)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 为了更快的获得结果，我们希望通过拟合函数来获得预测能力"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ f(rm) = k * rm + b $$ "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Random Approach"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ Loss(k, b) = \\frac{1}{n} \\sum_{i \\in N} (\\hat{y_i} - y_i) ^ 2 $$\n",
    "$$ Loss(k, b) = \\frac{1}{n} \\sum_{i \\in N} ((k * rm_i + b) - y_i) ^ 2 $$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "def loss(y_hat, y):\n",
    "    return np.mean((y_hat - y) ** 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid syntax (<ipython-input-24-600da923a5ae>, line 2)",
     "output_type": "error",
     "traceback": [
      "\u001B[1;36m  File \u001B[1;32m\"<ipython-input-24-600da923a5ae>\"\u001B[1;36m, line \u001B[1;32m2\u001B[0m\n\u001B[1;33m    |\u001B[0m\n\u001B[1;37m    ^\u001B[0m\n\u001B[1;31mSyntaxError\u001B[0m\u001B[1;31m:\u001B[0m invalid syntax\n"
     ]
    }
   ],
   "source": [
    "import random\n",
    "|"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "min_loss = float('inf')\n",
    "best_k, bes_b = None, None\n",
    "\n",
    "for step in range(1000):\n",
    "    min_v, max_v = -100, 100\n",
    "    k, b = random.randrange(min_v, max_v), random.randrange(min_v, max_v)\n",
    "    y_hats = [k * rm_i  + b for rm_i in x]\n",
    "    current_loss = loss(y_hats, y)\n",
    "    \n",
    "    if current_loss < min_loss:\n",
    "        min_loss = current_loss\n",
    "        best_k, best_b = k, b\n",
    "        print('在第{}步，我们获得了函数 f(rm) = {} * rm + {}, 此时loss是: {}'.format(step, k, b, current_loss))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.scatter(x, y)\n",
    "plt.scatter(x, [best_k * rm + best_b for rm in x])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 蒙特卡洛模拟"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Supervisor"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ Loss(k, b) = \\frac{1}{n} \\sum_{i \\in N} ((k * rm_i + b) - y_i) ^ 2 $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\frac{\\partial{loss(k, b)}}{\\partial{k}} = \\frac{2}{n}\\sum_{i \\in N}(k * rm_i + b - y_i) * rm_i $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\frac{\\partial{loss(k, b)}}{\\partial{b}} = \\frac{2}{n}\\sum_{i \\in N}(k * rm_i + b - y_i)$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "在第0步，我们获得了函数 f(rm) = 2.992895462477644 * rm + 1.256382257261992, 此时loss是: 68.0760933736895\n",
      "在第1步，我们获得了函数 f(rm) = 3.363200337333218 * rm + 1.3057256637742434, 此时loss是: 59.83571206238204\n",
      "在第2步，我们获得了函数 f(rm) = 3.4311382699792166 * rm + 1.307537587149823, 此时loss是: 59.55995126027374\n",
      "在第3步，我们获得了函数 f(rm) = 3.444512616283083 * rm + 1.3007739707036383, 此时loss是: 59.54355105531396\n",
      "在第4步，我们获得了函数 f(rm) = 3.4480404782041147 * rm + 1.2924645690525849, 此时loss是: 59.53560014359685\n",
      "在第5步，我们获得了函数 f(rm) = 3.449791234842239 * rm + 1.2838779289876976, 此时loss是: 59.52792793828484\n",
      "在第6步，我们获得了函数 f(rm) = 3.4512210378389256 * rm + 1.2752429644166714, 此时loss是: 59.520268373622365\n",
      "在第7步，我们获得了函数 f(rm) = 3.4525926556182074 * rm + 1.2666009833554632, 此时loss是: 59.512612783825794\n",
      "在第8步，我们获得了函数 f(rm) = 3.4539535058525073 * rm + 1.2579594395902398, 此时loss是: 59.504960884992386\n",
      "在第9步，我们获得了函数 f(rm) = 3.4553121453139455 * rm + 1.2493196777767503, 此时loss是: 59.497312666164476\n",
      "在第10步，我们获得了函数 f(rm) = 3.4566701181704915 * rm + 1.2406819401539435, 此时loss是: 59.489668125273276\n",
      "在第11步，我们获得了函数 f(rm) = 3.4580277031377658 * rm + 1.232046270025366, 此时loss是: 59.48202726054049\n",
      "在第12步，我们获得了函数 f(rm) = 3.4593849505754624 * rm + 1.2234126747959784, 此时loss是: 59.47439007019792\n",
      "在第13步，我们获得了函数 f(rm) = 3.460741869635521 * rm + 1.2147811553927965, 此时loss是: 59.466756552478635\n",
      "在第14步，我们获得了函数 f(rm) = 3.4620984620337665 * rm + 1.2061517115739644, 此时loss是: 59.459126705616484\n",
      "在第15步，我们获得了函数 f(rm) = 3.4634547281441286 * rm + 1.1975243428867963, 此时loss是: 59.45150052784621\n",
      "在第16步，我们获得了函数 f(rm) = 3.464810668098372 * rm + 1.1888990488406599, 此时loss是: 59.44387801740345\n",
      "在第17步，我们获得了函数 f(rm) = 3.4661662819845485 * rm + 1.1802758289381736, 此时loss是: 59.43625917252454\n",
      "在第18步，我们获得了函数 f(rm) = 3.4675215698828024 * rm + 1.1716546826808365, 此时loss是: 59.428643991446776\n",
      "在第19步，我们获得了函数 f(rm) = 3.4688765318718393 * rm + 1.1630356095700436, 此时loss是: 59.421032472408285\n",
      "在第20步，我们获得了函数 f(rm) = 3.470231168030087 * rm + 1.1544186091072692, 此时loss是: 59.41342461364818\n",
      "在第21步，我们获得了函数 f(rm) = 3.471585478435909 * rm + 1.145803680794101, 此时loss是: 59.405820413406104\n",
      "在第22步，我们获得了函数 f(rm) = 3.472939463167642 * rm + 1.1371908241322446, 此时loss是: 59.3982198699228\n",
      "在第23步，我们获得了函数 f(rm) = 3.4742931223036013 * rm + 1.1285800386235254, 此时loss是: 59.39062298143977\n",
      "在第24步，我们获得了函数 f(rm) = 3.4756464559220843 * rm + 1.1199713237698885, 此时loss是: 59.38302974619935\n",
      "在第25步，我们获得了函数 f(rm) = 3.476999464101368 * rm + 1.1113646790733989, 此时loss是: 59.37544016244479\n",
      "在第26步，我们获得了函数 f(rm) = 3.478352146919713 * rm + 1.102760104036241, 此时loss是: 59.36785422842016\n",
      "在第27步，我们获得了函数 f(rm) = 3.4797045044553587 * rm + 1.0941575981607192, 此时loss是: 59.36027194237025\n",
      "在第28步，我们获得了函数 f(rm) = 3.4810565367865265 * rm + 1.0855571609492578, 此时loss是: 59.35269330254089\n",
      "在第29步，我们获得了函数 f(rm) = 3.48240824399142 * rm + 1.0769587919044001, 此时loss是: 59.34511830717861\n",
      "在第30步，我们获得了函数 f(rm) = 3.4837596261482218 * rm + 1.0683624905288096, 此时loss是: 59.337546954530886\n",
      "在第31步，我们获得了函数 f(rm) = 3.485110683335097 * rm + 1.059768256325269, 此时loss是: 59.32997924284599\n",
      "在第32步，我们获得了函数 f(rm) = 3.4864614156301923 * rm + 1.051176088796681, 此时loss是: 59.32241517037289\n",
      "在第33步，我们获得了函数 f(rm) = 3.4878118231116355 * rm + 1.0425859874460675, 此时loss是: 59.31485473536165\n",
      "在第34步，我们获得了函数 f(rm) = 3.4891619058575345 * rm + 1.0339979517765698, 此时loss是: 59.30729793606308\n",
      "在第35步，我们获得了函数 f(rm) = 3.4905116639459797 * rm + 1.0254119812914493, 此时loss是: 59.29974477072882\n",
      "在第36步，我们获得了函数 f(rm) = 3.491861097455043 * rm + 1.0168280754940862, 此时loss是: 59.29219523761128\n",
      "在第37步，我们获得了函数 f(rm) = 3.4932102064627744 * rm + 1.0082462338879803, 此时loss是: 59.28464933496386\n",
      "在第38步，我们获得了函数 f(rm) = 3.4945589910472097 * rm + 0.999666455976751, 此时loss是: 59.27710706104057\n",
      "在第39步，我们获得了函数 f(rm) = 3.495907451286363 * rm + 0.9910887412641368, 此时loss是: 59.269568414096604\n",
      "在第40步，我们获得了函数 f(rm) = 3.49725558725823 * rm + 0.9825130892539957, 此时loss是: 59.26203339238765\n",
      "在第41步，我们获得了函数 f(rm) = 3.498603399040788 * rm + 0.973939499450305, 此时loss是: 59.2545019941704\n",
      "在第42步，我们获得了函数 f(rm) = 3.4999508867119964 * rm + 0.9653679713571612, 此时loss是: 59.24697421770242\n",
      "在第43步，我们获得了函数 f(rm) = 3.5012980503497944 * rm + 0.9567985044787802, 此时loss是: 59.23945006124206\n",
      "在第44步，我们获得了函数 f(rm) = 3.5026448900321028 * rm + 0.9482310983194969, 此时loss是: 59.231929523048336\n",
      "在第45步，我们获得了函数 f(rm) = 3.503991405836824 * rm + 0.9396657523837656, 此时loss是: 59.2244126013815\n",
      "在第46步，我们获得了函数 f(rm) = 3.505337597841842 * rm + 0.9311024661761597, 此时loss是: 59.216899294502376\n",
      "在第47步，我们获得了函数 f(rm) = 3.5066834661250215 * rm + 0.9225412392013714, 此时loss是: 59.20938960067251\n",
      "在第48步，我们获得了函数 f(rm) = 3.508029010764208 * rm + 0.9139820709642127, 此时loss是: 59.20188351815455\n",
      "在第49步，我们获得了函数 f(rm) = 3.509374231837229 * rm + 0.9054249609696142, 此时loss是: 59.19438104521186\n",
      "在第50步，我们获得了函数 f(rm) = 3.510719129421895 * rm + 0.8968699087226257, 此时loss是: 59.186882180108555\n",
      "在第51步，我们获得了函数 f(rm) = 3.5120637035959934 * rm + 0.8883169137284158, 此时loss是: 59.17938692110979\n",
      "在第52步，我们获得了函数 f(rm) = 3.5134079544372967 * rm + 0.8797659754922724, 此时loss是: 59.17189526648152\n",
      "在第53步，我们获得了函数 f(rm) = 3.5147518820235577 * rm + 0.8712170935196023, 此时loss是: 59.164407214490225\n",
      "在第54步，我们获得了函数 f(rm) = 3.5160954864325102 * rm + 0.8626702673159311, 此时loss是: 59.156922763403465\n",
      "在第55步，我们获得了函数 f(rm) = 3.517438767741869 * rm + 0.8541254963869033, 此时loss是: 59.14944191148973\n",
      "在第56步，我们获得了函数 f(rm) = 3.5187817260293306 * rm + 0.8455827802382824, 此时loss是: 59.14196465701825\n",
      "在第57步，我们获得了函数 f(rm) = 3.5201243613725732 * rm + 0.8370421183759507, 此时loss是: 59.134490998258954\n",
      "在第58步，我们获得了函数 f(rm) = 3.5214666738492553 * rm + 0.8285035103059092, 此时loss是: 59.127020933482775\n",
      "在第59步，我们获得了函数 f(rm) = 3.5228086635370177 * rm + 0.819966955534278, 此时loss是: 59.119554460961375\n",
      "在第60步，我们获得了函数 f(rm) = 3.5241503305134825 * rm + 0.8114324535672959, 此时loss是: 59.11209157896736\n",
      "在第61步，我们获得了函数 f(rm) = 3.5254916748562524 * rm + 0.80290000391132, 此时loss是: 59.10463228577405\n",
      "在第62步，我们获得了函数 f(rm) = 3.526832696642912 * rm + 0.7943696060728267, 此时loss是: 59.097176579655546\n",
      "在第63步，我们获得了函数 f(rm) = 3.528173395951027 * rm + 0.7858412595584107, 此时loss是: 59.089724458886984\n",
      "在第64步，我们获得了函数 f(rm) = 3.5295137728581447 * rm + 0.7773149638747854, 此时loss是: 59.08227592174422\n",
      "在第65步，我们获得了函数 f(rm) = 3.5308538274417933 * rm + 0.7687907185287829, 此时loss是: 59.07483096650386\n",
      "在第66步，我们获得了函数 f(rm) = 3.532193559779483 * rm + 0.7602685230273539, 此时loss是: 59.06738959144353\n",
      "在第67步，我们获得了函数 f(rm) = 3.5335329699487055 * rm + 0.7517483768775677, 此时loss是: 59.05995179484139\n",
      "在第68步，我们获得了函数 f(rm) = 3.534872058026932 * rm + 0.7432302795866119, 此时loss是: 59.052517574976704\n",
      "在第69步，我们获得了函数 f(rm) = 3.5362108240916177 * rm + 0.734714230661793, 此时loss是: 59.04508693012961\n",
      "在第70步，我们获得了函数 f(rm) = 3.537549268220197 * rm + 0.7262002296105354, 此时loss是: 59.037659858580774\n",
      "在第71步，我们获得了函数 f(rm) = 3.5388873904900873 * rm + 0.7176882759403828, 此时loss是: 59.03023635861179\n",
      "在第72步，我们获得了函数 f(rm) = 3.5402251909786866 * rm + 0.7091783691589965, 此时loss是: 59.02281642850527\n",
      "在第73步，我们获得了函数 f(rm) = 3.541562669763374 * rm + 0.7006705087741565, 此时loss是: 59.015400066544395\n",
      "在第74步，我们获得了函数 f(rm) = 3.542899826921511 * rm + 0.6921646942937614, 此时loss是: 59.007987271013405\n",
      "在第75步，我们获得了函数 f(rm) = 3.5442366625304387 * rm + 0.6836609252258277, 此时loss是: 59.00057804019719\n",
      "在第76步，我们获得了函数 f(rm) = 3.545573176667482 * rm + 0.6751592010784907, 此时loss是: 58.99317237238153\n",
      "在第77步，我们获得了函数 f(rm) = 3.5469093694099456 * rm + 0.6666595213600035, 此时loss是: 58.985770265853\n",
      "在第78步，我们获得了函数 f(rm) = 3.5482452408351155 * rm + 0.6581618855787377, 此时loss是: 58.97837171889906\n",
      "在第79步，我们获得了函数 f(rm) = 3.5495807910202597 * rm + 0.6496662932431831, 此时loss是: 58.970976729808\n",
      "在第80步，我们获得了函数 f(rm) = 3.5509160200426284 * rm + 0.6411727438619479, 此时loss是: 58.96358529686881\n",
      "在第81步，我们获得了函数 f(rm) = 3.5522509279794514 * rm + 0.632681236943758, 此时loss是: 58.95619741837139\n",
      "在第82步，我们获得了函数 f(rm) = 3.553585514907941 * rm + 0.6241917719974578, 此时loss是: 58.948813092606535\n",
      "在第83步，我们获得了函数 f(rm) = 3.5549197809052915 * rm + 0.6157043485320095, 此时loss是: 58.941432317865704\n",
      "在第84步，我们获得了函数 f(rm) = 3.556253726048677 * rm + 0.6072189660564938, 此时loss是: 58.93405509244129\n",
      "在第85步，我们获得了函数 f(rm) = 3.5575873504152553 * rm + 0.5987356240801093, 此时loss是: 58.92668141462645\n",
      "在第86步，我们获得了函数 f(rm) = 3.5589206540821623 * rm + 0.5902543221121722, 此时loss是: 58.91931128271522\n",
      "在第87步，我们获得了函数 f(rm) = 3.560253637126519 * rm + 0.5817750596621174, 此时loss是: 58.91194469500235\n",
      "在第88步，我们获得了函数 f(rm) = 3.5615862996254255 * rm + 0.5732978362394973, 此时loss是: 58.904581649783616\n",
      "在第89步，我们获得了函数 f(rm) = 3.5629186416559646 * rm + 0.5648226513539822, 此时loss是: 58.8972221453554\n",
      "在第90步，我们获得了函数 f(rm) = 3.5642506632951996 * rm + 0.5563495045153608, 此时loss是: 58.88986618001494\n",
      "在第91步，我们获得了函数 f(rm) = 3.5655823646201763 * rm + 0.5478783952335391, 此时loss是: 58.882513752060326\n",
      "在第92步，我们获得了函数 f(rm) = 3.5669137457079207 * rm + 0.5394093230185412, 此时loss是: 58.875164859790566\n",
      "在第93步，我们获得了函数 f(rm) = 3.568244806635441 * rm + 0.530942287380509, 此时loss是: 58.86781950150542\n",
      "在第94步，我们获得了函数 f(rm) = 3.5695755474797277 * rm + 0.5224772878297025, 此时loss是: 58.86047767550535\n",
      "在第95步，我们获得了函数 f(rm) = 3.570905968317751 * rm + 0.5140143238764989, 此时loss是: 58.85313938009179\n",
      "在第96步，我们获得了函数 f(rm) = 3.572236069226464 * rm + 0.5055533950313936, 此时loss是: 58.84580461356686\n",
      "在第97步，我们获得了函数 f(rm) = 3.5735658502828 * rm + 0.4970945008049995, 此时loss是: 58.83847337423364\n",
      "在第98步，我们获得了函数 f(rm) = 3.574895311563677 * rm + 0.4886376407080473, 此时loss是: 58.8311456603958\n",
      "在第99步，我们获得了函数 f(rm) = 3.576224453145989 * rm + 0.4801828142513851, 此时loss是: 58.82382147035816\n",
      "在第100步，我们获得了函数 f(rm) = 3.577553275106616 * rm + 0.471730020945979, 此时loss是: 58.816500802426155\n",
      "在第101步，我们获得了函数 f(rm) = 3.5788817775224193 * rm + 0.46327926030291244, 此时loss是: 58.80918365490591\n",
      "在第102步，我们获得了函数 f(rm) = 3.5802099604702393 * rm + 0.45483053183338656, 此时loss是: 58.801870026104666\n",
      "在第103步，我们获得了函数 f(rm) = 3.581537824026899 * rm + 0.44638383504871987, 此时loss是: 58.79455991433018\n",
      "在第104步，我们获得了函数 f(rm) = 3.5828653682692035 * rm + 0.43793916946034867, 此时loss是: 58.78725331789125\n",
      "在第105步，我们获得了函数 f(rm) = 3.584192593273939 * rm + 0.4294965345798265, 此时loss是: 58.779950235097374\n",
      "在第106步，我们获得了函数 f(rm) = 3.5855194991178743 * rm + 0.4210559299188245, 此时loss是: 58.77265066425886\n",
      "在第107步，我们获得了函数 f(rm) = 3.5868460858777573 * rm + 0.4126173549891311, 此时loss是: 58.76535460368688\n",
      "在第108步，我们获得了函数 f(rm) = 3.588172353630319 * rm + 0.40418080930265227, 此时loss是: 58.75806205169341\n",
      "在第109步，我们获得了函数 f(rm) = 3.5894983024522724 * rm + 0.3957462923714113, 此时loss是: 58.750773006591196\n",
      "在第110步，我们获得了函数 f(rm) = 3.5908239324203115 * rm + 0.3873138037075488, 此时loss是: 58.743487466693864\n",
      "在第111步，我们获得了函数 f(rm) = 3.592149243611111 * rm + 0.3788833428233227, 此时loss是: 58.73620543031575\n",
      "在第112步，我们获得了函数 f(rm) = 3.5934742361013288 * rm + 0.37045490923110835, 此时loss是: 58.72892689577206\n",
      "在第113步，我们获得了函数 f(rm) = 3.594798909967603 * rm + 0.3620285024433982, 此时loss是: 58.72165186137886\n",
      "在第114步，我们获得了函数 f(rm) = 3.596123265286554 * rm + 0.3536041219728019, 此时loss是: 58.7143803254529\n",
      "在第115步，我们获得了函数 f(rm) = 3.597447302134784 * rm + 0.34518176733204653, 此时loss是: 58.70711228631193\n",
      "在第116步，我们获得了函数 f(rm) = 3.598771020588876 * rm + 0.33676143803397607, 此时loss是: 58.69984774227424\n",
      "在第117步，我们获得了函数 f(rm) = 3.6000944207253953 * rm + 0.3283431335915519, 此时loss是: 58.69258669165922\n",
      "在第118步，我们获得了函数 f(rm) = 3.6014175026208877 * rm + 0.3199268535178522, 此时loss是: 58.68532913278682\n",
      "在第119步，我们获得了函数 f(rm) = 3.602740266351882 * rm + 0.3115125973260727, 此时loss是: 58.67807506397802\n",
      "在第120步，我们获得了函数 f(rm) = 3.6040627119948883 * rm + 0.3031003645295258, 此时loss是: 58.67082448355439\n",
      "在第121步，我们获得了函数 f(rm) = 3.6053848396263968 * rm + 0.294690154641641, 此时loss是: 58.66357738983843\n",
      "在第122步，我们获得了函数 f(rm) = 3.6067066493228808 * rm + 0.28628196717596494, 此时loss是: 58.656333781153464\n",
      "在第123步，我们获得了函数 f(rm) = 3.608028141160795 * rm + 0.27787580164616127, 此时loss是: 58.64909365582361\n",
      "在第124步，我们获得了函数 f(rm) = 3.6093493152165768 * rm + 0.2694716575660105, 此时loss是: 58.64185701217368\n",
      "在第125步，我们获得了函数 f(rm) = 3.610670171566642 * rm + 0.2610695344494099, 此时loss是: 58.63462384852946\n",
      "在第126步，我们获得了函数 f(rm) = 3.611990710287391 * rm + 0.2526694318103738, 此时loss是: 58.62739416321754\n",
      "在第127步，我们获得了函数 f(rm) = 3.6133109314552048 * rm + 0.2442713491630335, 此时loss是: 58.620167954565034\n",
      "在第128步，我们获得了函数 f(rm) = 3.6146308351464462 * rm + 0.235875286021637, 此时loss是: 58.612945220900166\n",
      "在第129步，我们获得了函数 f(rm) = 3.6159504214374585 * rm + 0.22748124190054897, 此时loss是: 58.60572596055192\n",
      "在第130步，我们获得了函数 f(rm) = 3.6172696904045694 * rm + 0.2190892163142513, 此时loss是: 58.59851017184985\n",
      "在第131步，我们获得了函数 f(rm) = 3.618588642124085 * rm + 0.2106992087773421, 此时loss是: 58.591297853124615\n",
      "在第132步，我们获得了函数 f(rm) = 3.619907276672295 * rm + 0.20231121880453665, 此时loss是: 58.58408900270767\n",
      "在第133步，我们获得了函数 f(rm) = 3.6212255941254705 * rm + 0.19392524591066673, 此时loss是: 58.57688361893087\n",
      "在第134步，我们获得了函数 f(rm) = 3.622543594559864 * rm + 0.18554128961068073, 此时loss是: 58.56968170012733\n",
      "在第135步，我们获得了函数 f(rm) = 3.62386127805171 * rm + 0.17715934941964379, 此时loss是: 58.56248324463079\n",
      "在第136步，我们获得了函数 f(rm) = 3.625178644677223 * rm + 0.16877942485273756, 此时loss是: 58.55528825077574\n",
      "在第137步，我们获得了函数 f(rm) = 3.6264956945126023 * rm + 0.16040151542526043, 此时loss是: 58.54809671689752\n",
      "在第138步，我们获得了函数 f(rm) = 3.6278124276340264 * rm + 0.15202562065262726, 此时loss是: 58.540908641332344\n",
      "在第139步，我们获得了函数 f(rm) = 3.629128844117657 * rm + 0.14365174005036938, 此时loss是: 58.53372402241705\n",
      "在第140步，我们获得了函数 f(rm) = 3.630444944039635 * rm + 0.13527987313413464, 此时loss是: 58.52654285848951\n",
      "在第141步，我们获得了函数 f(rm) = 3.6317607274760864 * rm + 0.1269100194196875, 此时loss是: 58.519365147888166\n",
      "在第142步，我们获得了函数 f(rm) = 3.633076194503116 * rm + 0.1185421784229087, 此时loss是: 58.51219088895237\n",
      "在第143步，我们获得了函数 f(rm) = 3.6343913451968115 * rm + 0.11017634965979553, 此时loss是: 58.50502008002227\n",
      "在第144步，我们获得了函数 f(rm) = 3.6357061796332437 * rm + 0.10181253264646165, 此时loss是: 58.49785271943886\n",
      "在第145步，我们获得了函数 f(rm) = 3.6370206978884623 * rm + 0.0934507268991369, 此时loss是: 58.49068880554377\n",
      "在第146步，我们获得了函数 f(rm) = 3.638334900038501 * rm + 0.08509093193416774, 此时loss是: 58.483528336679626\n",
      "在第147步，我们获得了函数 f(rm) = 3.6396487861593734 * rm + 0.0767331472680166, 此时loss是: 58.476371311189745\n",
      "在第148步，我们获得了函数 f(rm) = 3.6409623563270768 * rm + 0.06837737241726259, 此时loss是: 58.46921772741825\n",
      "在第149步，我们获得了函数 f(rm) = 3.642275610617588 * rm + 0.06002360689860061, 此时loss是: 58.46206758370998\n",
      "在第150步，我们获得了函数 f(rm) = 3.643588549106868 * rm + 0.0516718502288422, 此时loss是: 58.454920878410725\n",
      "在第151步，我们获得了函数 f(rm) = 3.644901171870857 * rm + 0.04332210192491487, 此时loss是: 58.44777760986706\n",
      "在第152步，我们获得了函数 f(rm) = 3.6462134789854788 * rm + 0.03497436150386236, 此时loss是: 58.44063777642624\n",
      "在第153步，我们获得了函数 f(rm) = 3.6475254705266384 * rm + 0.02662862848284452, 此时loss是: 58.43350137643632\n",
      "在第154步，我们获得了函数 f(rm) = 3.6488371465702225 * rm + 0.018284902379137324, 此时loss是: 58.426368408246304\n",
      "在第155步，我们获得了函数 f(rm) = 3.650148507192099 * rm + 0.009943182710132777, 此时loss是: 58.41923887020572\n",
      "在第156步，我们获得了函数 f(rm) = 3.651459552468119 * rm + 0.0016034689933390224, 此时loss是: 58.412112760665245\n",
      "在第157步，我们获得了函数 f(rm) = 3.6527702824741133 * rm + -0.0067342392536198035, 此时loss是: 58.40499007797601\n",
      "在第158步，我们获得了函数 f(rm) = 3.654080697285896 * rm + -0.015069942513003603, 此时loss是: 58.39787082049019\n",
      "在第159步，我们获得了函数 f(rm) = 3.655390796979263 * rm + -0.023403641266956203, 此时loss是: 58.39075498656063\n",
      "在第160步，我们获得了函数 f(rm) = 3.6567005816299916 * rm + -0.031735335997505665, 此时loss是: 58.38364257454093\n",
      "在第161步，我们获得了函数 f(rm) = 3.65801005131384 * rm + -0.04006502718656395, 此时loss是: 58.37653358278558\n",
      "在第162步，我们获得了函数 f(rm) = 3.6593192061065496 * rm + -0.048392715315927246, 此时loss是: 58.36942800964978\n",
      "在第163步，我们获得了函数 f(rm) = 3.6606280460838425 * rm + -0.0567184008672759, 此时loss是: 58.362325853489615\n",
      "在第164步，我们获得了函数 f(rm) = 3.661936571321424 * rm + -0.0650420843221743, 此时loss是: 58.355227112662\n",
      "在第165步，我们获得了函数 f(rm) = 3.663244781894979 * rm + -0.07336376616207112, 此时loss是: 58.34813178552433\n",
      "在第166步，我们获得了函数 f(rm) = 3.6645526778801765 * rm + -0.08168344686829931, 此时loss是: 58.34103987043511\n",
      "在第167步，我们获得了函数 f(rm) = 3.6658602593526664 * rm + -0.09000112692207592, 此时loss是: 58.33395136575356\n",
      "在第168步，我们获得了函数 f(rm) = 3.6671675263880794 * rm + -0.0983168068045025, 此时loss是: 58.326866269839655\n",
      "在第169步，我们获得了函数 f(rm) = 3.668474479062029 * rm + -0.10663048699656476, 此时loss是: 58.319784581054144\n",
      "在第170步，我们获得了函数 f(rm) = 3.6697811174501114 * rm + -0.11494216797913265, 此时loss是: 58.31270629775851\n",
      "在第171步，我们获得了函数 f(rm) = 3.6710874416279027 * rm + -0.12325185023296062, 此时loss是: 58.305631418315265\n",
      "在第172步，我们获得了函数 f(rm) = 3.672393451670962 * rm + -0.13155953423868758, 此时loss是: 58.298559941087426\n",
      "在第173步，我们获得了函数 f(rm) = 3.6736991476548297 * rm + -0.1398652204768368, 此时loss是: 58.291491864438974\n",
      "在第174步，我们获得了函数 f(rm) = 3.675004529655029 * rm + -0.1481689094278159, 此时loss是: 58.28442718673447\n",
      "在第175步，我们获得了函数 f(rm) = 3.676309597747064 * rm + -0.15647060157191706, 此时loss是: 58.277365906339604\n",
      "在第176步，我们获得了函数 f(rm) = 3.6776143520064206 * rm + -0.16477029738931695, 此时loss是: 58.27030802162052\n",
      "在第177步，我们获得了函数 f(rm) = 3.678918792508567 * rm + -0.17306799736007678, 此时loss是: 58.26325353094436\n",
      "在第178步，我们获得了函数 f(rm) = 3.680222919328953 * rm + -0.1813637019641423, 此时loss是: 58.25620243267894\n",
      "在第179步，我们获得了函数 f(rm) = 3.681526732543011 * rm + -0.18965741168134384, 此时loss是: 58.24915472519286\n",
      "在第180步，我们获得了函数 f(rm) = 3.6828302322261544 * rm + -0.1979491269913963, 此时loss是: 58.242110406855595\n",
      "在第181步，我们获得了函数 f(rm) = 3.6841334184537775 * rm + -0.20623884837389944, 此时loss是: 58.235069476037346\n",
      "在第182步，我们获得了函数 f(rm) = 3.6854362913012593 * rm + -0.2145265763083374, 此时loss是: 58.22803193110911\n",
      "在第183步，我们获得了函数 f(rm) = 3.686738850843958 * rm + -0.22281231127407924, 此时loss是: 58.22099777044258\n",
      "在第184步，我们获得了函数 f(rm) = 3.6880410971572153 * rm + -0.2310960537503786, 此时loss是: 58.213966992410406\n",
      "在第185步，我们获得了函数 f(rm) = 3.6893430303163535 * rm + -0.23937780421637395, 此时loss是: 58.20693959538586\n",
      "在第186步，我们获得了函数 f(rm) = 3.6906446503966785 * rm + -0.24765756315108844, 此时loss是: 58.19991557774309\n",
      "在第187步，我们获得了函数 f(rm) = 3.6919459574734756 * rm + -0.25593533103343025, 此时loss是: 58.192894937857\n",
      "在第188步，我们获得了函数 f(rm) = 3.6932469516220157 * rm + -0.2642111083421921, 此时loss是: 58.1858776741032\n",
      "在第189步，我们获得了函数 f(rm) = 3.694547632917547 * rm + -0.2724848955560518, 此时loss是: 58.17886378485823\n",
      "在第190步，我们获得了函数 f(rm) = 3.6958480014353037 * rm + -0.28075669315357193, 此时loss是: 58.17185326849935\n",
      "在第191步，我们获得了函数 f(rm) = 3.697148057250499 * rm + -0.2890265016132002, 此时loss是: 58.16484612340453\n",
      "在第192步，我们获得了函数 f(rm) = 3.6984478004383297 * rm + -0.2972943214132689, 此时loss是: 58.1578423479526\n",
      "在第193步，我们获得了函数 f(rm) = 3.699747231073974 * rm + -0.30556015303199563, 此时loss是: 58.15084194052307\n",
      "在第194步，我们获得了函数 f(rm) = 3.701046349232592 * rm + -0.3138239969474828, 此时loss是: 58.14384489949649\n",
      "在第195步，我们获得了函数 f(rm) = 3.702345154989326 * rm + -0.32208585363771786, 此时loss是: 58.13685122325381\n",
      "在第196步，我们获得了函数 f(rm) = 3.703643648419299 * rm + -0.33034572358057346, 此时loss是: 58.12986091017698\n",
      "在第197步，我们获得了函数 f(rm) = 3.7049418295976184 * rm + -0.3386036072538071, 此时loss是: 58.122873958648825\n",
      "在第198步，我们获得了函数 f(rm) = 3.706239698599371 * rm + -0.3468595051350617, 此时loss是: 58.11589036705267\n",
      "在第199步，我们获得了函数 f(rm) = 3.707537255499627 * rm + -0.355113417701865, 此时loss是: 58.10891013377287\n",
      "在第200步，我们获得了函数 f(rm) = 3.7088345003734386 * rm + -0.3633653454316301, 此时loss是: 58.101933257194375\n",
      "在第201步，我们获得了函数 f(rm) = 3.710131433295839 * rm + -0.37161528880165534, 此时loss是: 58.09495973570309\n",
      "在第202步，我们获得了函数 f(rm) = 3.711428054341843 * rm + -0.37986324828912416, 此时loss是: 58.087989567685504\n",
      "在第203步，我们获得了函数 f(rm) = 3.712724363586449 * rm + -0.38810922437110534, 此时loss是: 58.081022751529005\n",
      "在第204步，我们获得了函数 f(rm) = 3.714020361104638 * rm + -0.3963532175245527, 此时loss是: 58.07405928562183\n",
      "在第205步，我们获得了函数 f(rm) = 3.7153160469713695 * rm + -0.4045952282263058, 此时loss是: 58.067099168352726\n",
      "在第206步，我们获得了函数 f(rm) = 3.7166114212615877 * rm + -0.41283525695308915, 此时loss是: 58.0601423981115\n",
      "在第207步，我们获得了函数 f(rm) = 3.717906484050218 * rm + -0.4210733041815128, 此时loss是: 58.053188973288485\n",
      "在第208步，我们获得了函数 f(rm) = 3.719201235412168 * rm + -0.42930937038807204, 此时loss是: 58.046238892275014\n",
      "在第209步，我们获得了函数 f(rm) = 3.7204956754223275 * rm + -0.43754345604914774, 此时loss是: 58.0392921534631\n",
      "在第210步，我们获得了函数 f(rm) = 3.721789804155568 * rm + -0.4457755616410062, 此时loss是: 58.032348755245444\n",
      "在第211步，我们获得了函数 f(rm) = 3.7230836216867425 * rm + -0.45400568763979915, 此时loss是: 58.025408696015646\n",
      "在第212步，我们获得了函数 f(rm) = 3.7243771280906866 * rm + -0.46223383452156375, 此时loss是: 58.01847197416804\n",
      "在第213步，我们获得了函数 f(rm) = 3.7256703234422175 * rm + -0.47046000276222283, 此时loss是: 58.011538588097764\n",
      "在第214步，我们获得了函数 f(rm) = 3.7269632078161354 * rm + -0.47868419283758457, 此时loss是: 58.00460853620055\n",
      "在第215步，我们获得了函数 f(rm) = 3.728255781287221 * rm + -0.486906405223343, 此时loss是: 57.9976818168732\n",
      "在第216步，我们获得了函数 f(rm) = 3.729548043930239 * rm + -0.4951266403950775, 此时loss是: 57.990758428513026\n",
      "在第217步，我们获得了函数 f(rm) = 3.730839995819933 * rm + -0.5033448988282533, 此时loss是: 57.983838369518224\n",
      "在第218步，我们获得了函数 f(rm) = 3.7321316370310322 * rm + -0.5115611809982212, 此时loss是: 57.97692163828775\n",
      "在第219步，我们获得了函数 f(rm) = 3.7334229676382455 * rm + -0.5197754873802176, 此时loss是: 57.97000823322139\n",
      "在第220步，我们获得了函数 f(rm) = 3.734713987716265 * rm + -0.5279878184493647, 此时loss是: 57.9630981527195\n",
      "在第221步，我们获得了函数 f(rm) = 3.736004697339764 * rm + -0.5361981746806705, 此时loss是: 57.956191395183474\n",
      "在第222步，我们获得了函数 f(rm) = 3.737295096583398 * rm + -0.5444065565490288, 此时loss是: 57.94928795901526\n",
      "在第223步，我们获得了函数 f(rm) = 3.738585185521805 * rm + -0.552612964529219, 此时loss是: 57.94238784261772\n",
      "在第224步，我们获得了函数 f(rm) = 3.739874964229605 * rm + -0.5608173990959064, 此时loss是: 57.93549104439433\n",
      "在第225步，我们获得了函数 f(rm) = 3.7411644327813995 * rm + -0.5690198607236424, 此时loss是: 57.928597562749516\n",
      "在第226步，我们获得了函数 f(rm) = 3.7424535912517727 * rm + -0.577220349886864, 此时loss是: 57.92170739608834\n",
      "在第227步，我们获得了函数 f(rm) = 3.7437424397152905 * rm + -0.5854188670598942, 此时loss是: 57.914820542816656\n",
      "在第228步，我们获得了函数 f(rm) = 3.7450309782465006 * rm + -0.5936154127169421, 此时loss是: 57.90793700134109\n",
      "在第229步，我们获得了函数 f(rm) = 3.746319206919934 * rm + -0.6018099873321023, 此时loss是: 57.90105677006918\n",
      "在第230步，我们获得了函数 f(rm) = 3.747607125810102 * rm + -0.610002591379356, 此时loss是: 57.89417984740893\n",
      "在第231步，我们获得了函数 f(rm) = 3.7488947349914987 * rm + -0.61819322533257, 此时loss是: 57.88730623176929\n",
      "在第232步，我们获得了函数 f(rm) = 3.750182034538601 * rm + -0.6263818896654973, 此时loss是: 57.88043592155999\n",
      "在第233步，我们获得了函数 f(rm) = 3.751469024525868 * rm + -0.6345685848517769, 此时loss是: 57.873568915191505\n",
      "在第234步，我们获得了函数 f(rm) = 3.7527557050277394 * rm + -0.642753311364934, 此时loss是: 57.8667052110751\n",
      "在第235步，我们获得了函数 f(rm) = 3.754042076118638 * rm + -0.6509360696783798, 此时loss是: 57.85984480762268\n",
      "在第236步，我们获得了函数 f(rm) = 3.7553281378729686 * rm + -0.6591168602654118, 此时loss是: 57.852987703247024\n",
      "在第237步，我们获得了函数 f(rm) = 3.756613890365118 * rm + -0.6672956835992138, 此时loss是: 57.84613389636169\n",
      "在第238步，我们获得了函数 f(rm) = 3.757899333669455 * rm + -0.6754725401528553, 此时loss是: 57.83928338538095\n",
      "在第239步，我们获得了函数 f(rm) = 3.7591844678603312 * rm + -0.6836474303992925, 此时loss是: 57.83243616871976\n",
      "在第240步，我们获得了函数 f(rm) = 3.7604692930120796 * rm + -0.6918203548113679, 此时loss是: 57.82559224479412\n",
      "在第241步，我们获得了函数 f(rm) = 3.761753809199015 * rm + -0.69999131386181, 此时loss是: 57.81875161202035\n",
      "在第242步，我们获得了函数 f(rm) = 3.7630380164954356 * rm + -0.7081603080232338, 此时loss是: 57.811914268816004\n",
      "在第243步，我们获得了函数 f(rm) = 3.764321914975621 * rm + -0.7163273377681406, 此时loss是: 57.80508021359905\n",
      "在第244步，我们获得了函数 f(rm) = 3.7656055047138324 * rm + -0.7244924035689181, 此时loss是: 57.79824944478827\n",
      "在第245步，我们获得了函数 f(rm) = 3.766888785784314 * rm + -0.7326555058978403, 此时loss是: 57.791421960803454\n",
      "在第246步，我们获得了函数 f(rm) = 3.768171758261292 * rm + -0.7408166452270678, 此时loss是: 57.78459776006481\n",
      "在第247步，我们获得了函数 f(rm) = 3.769454422218974 * rm + -0.7489758220286477, 此时loss是: 57.77777684099357\n",
      "在第248步，我们获得了函数 f(rm) = 3.770736777731551 * rm + -0.7571330367745132, 此时loss是: 57.77095920201162\n",
      "在第249步，我们获得了函数 f(rm) = 3.772018824873195 * rm + -0.7652882899364843, 此时loss是: 57.76414484154154\n",
      "在第250步，我们获得了函数 f(rm) = 3.7733005637180614 * rm + -0.7734415819862678, 此时loss是: 57.7573337580068\n",
      "在第251步，我们获得了函数 f(rm) = 3.774581994340286 * rm + -0.7815929133954566, 此时loss是: 57.750525949831605\n",
      "在第252步，我们获得了函数 f(rm) = 3.7758631168139885 * rm + -0.7897422846355303, 此时loss是: 57.74372141544066\n",
      "在第253步，我们获得了函数 f(rm) = 3.7771439312132697 * rm + -0.7978896961778554, 此时loss是: 57.73692015325997\n",
      "在第254步，我们获得了函数 f(rm) = 3.778424437612213 * rm + -0.8060351484936848, 此时loss是: 57.73012216171578\n",
      "在第255步，我们获得了函数 f(rm) = 3.7797046360848845 * rm + -0.814178642054158, 此时loss是: 57.723327439235234\n",
      "在第256步，我们获得了函数 f(rm) = 3.780984526705331 * rm + -0.8223201773303015, 此时loss是: 57.7165359842464\n",
      "在第257步，我们获得了函数 f(rm) = 3.782264109547583 * rm + -0.8304597547930282, 此时loss是: 57.709747795178004\n",
      "在第258步，我们获得了函数 f(rm) = 3.783543384685653 * rm + -0.8385973749131381, 此时loss是: 57.702962870459324\n",
      "在第259步，我们获得了函数 f(rm) = 3.784822352193534 * rm + -0.8467330381613178, 此时loss是: 57.6961812085208\n",
      "在第260步，我们获得了函数 f(rm) = 3.7861010121452034 * rm + -0.8548667450081406, 此时loss是: 57.689402807793336\n",
      "在第261步，我们获得了函数 f(rm) = 3.7873793646146208 * rm + -0.8629984959240667, 此时loss是: 57.68262766670848\n",
      "在第262步，我们获得了函数 f(rm) = 3.7886574096757255 * rm + -0.8711282913794435, 此时loss是: 57.67585578369905\n",
      "在第263步，我们获得了函数 f(rm) = 3.7899351474024416 * rm + -0.8792561318445048, 此时loss是: 57.66908715719799\n",
      "在第264步，我们获得了函数 f(rm) = 3.7912125778686745 * rm + -0.8873820177893716, 此时loss是: 57.66232178563941\n",
      "在第265步，我们获得了函数 f(rm) = 3.792489701148311 * rm + -0.8955059496840518, 此时loss是: 57.65555966745796\n",
      "在第266步，我们获得了函数 f(rm) = 3.7937665173152224 * rm + -0.9036279279984403, 此时loss是: 57.64880080108939\n",
      "在第267步，我们获得了函数 f(rm) = 3.7950430264432597 * rm + -0.9117479532023189, 此时loss是: 57.642045184969575\n",
      "在第268步，我们获得了函数 f(rm) = 3.796319228606258 * rm + -0.9198660257653566, 此时loss是: 57.63529281753586\n",
      "在第269步，我们获得了函数 f(rm) = 3.7975951238780326 * rm + -0.9279821461571094, 此时loss是: 57.62854369722573\n",
      "在第270步，我们获得了函数 f(rm) = 3.7988707123323833 * rm + -0.9360963148470202, 此时loss是: 57.621797822477866\n",
      "在第271步，我们获得了函数 f(rm) = 3.8001459940430915 * rm + -0.9442085323044191, 此时loss是: 57.615055191731365\n",
      "在第272步，我们获得了函数 f(rm) = 3.8014209690839196 * rm + -0.9523187989985238, 此时loss是: 57.60831580342641\n",
      "在第273步，我们获得了函数 f(rm) = 3.8026956375286134 * rm + -0.9604271153984384, 此时loss是: 57.60157965600359\n",
      "在第274步，我们获得了函数 f(rm) = 3.8039699994509015 * rm + -0.9685334819731546, 此时loss是: 57.59484674790446\n",
      "在第275步，我们获得了函数 f(rm) = 3.8052440549244935 * rm + -0.9766378991915513, 此时loss是: 57.58811707757136\n",
      "在第276步，我们获得了函数 f(rm) = 3.806517804023082 * rm + -0.9847403675223947, 此时loss是: 57.581390643447136\n",
      "在第277步，我们获得了函数 f(rm) = 3.8077912468203414 * rm + -0.9928408874343381, 此时loss是: 57.57466744397572\n",
      "在第278步，我们获得了函数 f(rm) = 3.8090643833899285 * rm + -1.0009394593959224, 此时loss是: 57.567947477601464\n",
      "在第279步，我们获得了函数 f(rm) = 3.810337213805483 * rm + -1.0090360838755754, 此时loss是: 57.561230742769666\n",
      "在第280步，我们获得了函数 f(rm) = 3.8116097381406266 * rm + -1.0171307613416125, 此时loss是: 57.55451723792629\n",
      "在第281步，我们获得了函数 f(rm) = 3.812881956468963 * rm + -1.0252234922622365, 此时loss是: 57.54780696151814\n",
      "在第282步，我们获得了函数 f(rm) = 3.8141538688640777 * rm + -1.033314277105538, 此时loss是: 57.541099911992625\n",
      "在第283步，我们获得了函数 f(rm) = 3.8154254753995405 * rm + -1.041403116339494, 此时loss是: 57.534396087798086\n",
      "在第284步，我们获得了函数 f(rm) = 3.816696776148901 * rm + -1.0494900104319698, 此时loss是: 57.52769548738344\n",
      "在第285步，我们获得了函数 f(rm) = 3.817967771185692 * rm + -1.057574959850718, 此时loss是: 57.52099810919839\n",
      "在第286步，我们获得了函数 f(rm) = 3.8192384605834304 * rm + -1.0656579650633788, 此时loss是: 57.514303951693456\n",
      "在第287步，我们获得了函数 f(rm) = 3.820508844415613 * rm + -1.0737390265374798, 此时loss是: 57.50761301331984\n",
      "在第288步，我们获得了函数 f(rm) = 3.8217789227557195 * rm + -1.081818144740436, 此时loss是: 57.500925292529445\n",
      "在第289步，我们获得了函数 f(rm) = 3.8230486956772127 * rm + -1.0898953201395505, 此时loss是: 57.494240787775084\n",
      "在第290步，我们获得了函数 f(rm) = 3.8243181632535372 * rm + -1.0979705532020136, 此时loss是: 57.48755949751013\n",
      "在第291步，我们获得了函数 f(rm) = 3.82558732555812 * rm + -1.1060438443949034, 此时loss是: 57.480881420188766\n",
      "在第292步，我们获得了函数 f(rm) = 3.826856182664371 * rm + -1.1141151941851857, 此时loss是: 57.47420655426605\n",
      "在第293步，我们获得了函数 f(rm) = 3.8281247346456815 * rm + -1.1221846030397138, 此时loss是: 57.46753489819751\n",
      "在第294步，我们获得了函数 f(rm) = 3.8293929815754253 * rm + -1.130252071425229, 此时loss是: 57.46086645043966\n",
      "在第295步，我们获得了函数 f(rm) = 3.8306609235269593 * rm + -1.1383175998083606, 此时loss是: 57.45420120944973\n",
      "在第296步，我们获得了函数 f(rm) = 3.8319285605736217 * rm + -1.146381188655625, 此时loss是: 57.44753917368546\n",
      "在第297步，我们获得了函数 f(rm) = 3.833195892788735 * rm + -1.1544428384334269, 此时loss是: 57.44088034160558\n",
      "在第298步，我们获得了函数 f(rm) = 3.8344629202456013 * rm + -1.1625025496080585, 此时loss是: 57.43422471166952\n",
      "在第299步，我们获得了函数 f(rm) = 3.8357296430175074 * rm + -1.1705603226457004, 此时loss是: 57.427572282337415\n",
      "在第300步，我们获得了函数 f(rm) = 3.836996061177721 * rm + -1.1786161580124208, 此时loss是: 57.42092305207005\n",
      "在第301步，我们获得了函数 f(rm) = 3.838262174799493 * rm + -1.1866700561741756, 此时loss是: 57.41427701932909\n",
      "在第302步，我们获得了函数 f(rm) = 3.839527983956056 * rm + -1.194722017596809, 此时loss是: 57.407634182576935\n",
      "在第303步，我们获得了函数 f(rm) = 3.8407934887206268 * rm + -1.2027720427460529, 此时loss是: 57.40099454027652\n",
      "在第304步，我们获得了函数 f(rm) = 3.8420586891664015 * rm + -1.2108201320875276, 此时loss是: 57.39435809089183\n",
      "在第305步，我们获得了函数 f(rm) = 3.8433235853665617 * rm + -1.218866286086741, 此时loss是: 57.38772483288744\n",
      "在第306步，我们获得了函数 f(rm) = 3.8445881773942694 * rm + -1.2269105052090892, 此时loss是: 57.38109476472852\n",
      "在第307步，我们获得了函数 f(rm) = 3.84585246532267 * rm + -1.2349527899198565, 此时loss是: 57.37446788488127\n",
      "在第308步，我们获得了函数 f(rm) = 3.84711644922489 * rm + -1.2429931406842152, 此时loss是: 57.367844191812296\n",
      "在第309步，我们获得了函数 f(rm) = 3.8483801291740405 * rm + -1.2510315579672258, 此时loss是: 57.361223683989344\n",
      "在第310步，我们获得了函数 f(rm) = 3.849643505243213 * rm + -1.259068042233837, 此时loss是: 57.3546063598805\n",
      "在第311步，我们获得了函数 f(rm) = 3.850906577505482 * rm + -1.2671025939488854, 此时loss是: 57.34799221795484\n",
      "在第312步，我们获得了函数 f(rm) = 3.852169346033905 * rm + -1.2751352135770961, 此时loss是: 57.34138125668209\n",
      "在第313步，我们获得了函数 f(rm) = 3.853431810901522 * rm + -1.2831659015830827, 此时loss是: 57.33477347453261\n",
      "在第314步，我们获得了函数 f(rm) = 3.854693972181355 * rm + -1.2911946584313465, 此时loss是: 57.32816886997768\n",
      "在第315步，我们获得了函数 f(rm) = 3.855955829946408 * rm + -1.2992214845862775, 此时loss是: 57.32156744148933\n",
      "在第316步，我们获得了函数 f(rm) = 3.857217384269667 * rm + -1.3072463805121537, 此时loss是: 57.314969187540086\n",
      "在第317步，我们获得了函数 f(rm) = 3.858478635224103 * rm + -1.3152693466731418, 此时loss是: 57.30837410660336\n",
      "在第318步，我们获得了函数 f(rm) = 3.859739582882667 * rm + -1.3232903835332965, 此时loss是: 57.30178219715345\n",
      "在第319步，我们获得了函数 f(rm) = 3.8610002273182933 * rm + -1.3313094915565615, 此时loss是: 57.295193457665064\n",
      "在第320步，我们获得了函数 f(rm) = 3.8622605686038987 * rm + -1.3393266712067684, 此时loss是: 57.28860788661394\n",
      "在第321步，我们获得了函数 f(rm) = 3.8635206068123824 * rm + -1.3473419229476375, 此时loss是: 57.28202548247623\n",
      "在第322步，我们获得了函数 f(rm) = 3.864780342016626 * rm + -1.3553552472427775, 此时loss是: 57.27544624372918\n",
      "在第323步，我们获得了函数 f(rm) = 3.866039774289493 * rm + -1.3633666445556856, 此时loss是: 57.26887016885059\n",
      "在第324步，我们获得了函数 f(rm) = 3.867298903703831 * rm + -1.3713761153497475, 此时loss是: 57.262297256318845\n",
      "在第325步，我们获得了函数 f(rm) = 3.8685577303324683 * rm + -1.3793836600882377, 此时loss是: 57.255727504613446\n",
      "在第326步，我们获得了函数 f(rm) = 3.8698162542482164 * rm + -1.387389279234319, 此时loss是: 57.249160912214194\n",
      "在第327步，我们获得了函数 f(rm) = 3.8710744755238706 * rm + -1.395392973251043, 此时loss是: 57.2425974776019\n",
      "在第328步，我们获得了函数 f(rm) = 3.8723323942322057 * rm + -1.4033947426013502, 此时loss是: 57.23603719925799\n",
      "在第329步，我们获得了函数 f(rm) = 3.8735900104459824 * rm + -1.4113945877480691, 此时loss是: 57.22948007566478\n",
      "在第330步，我们获得了函数 f(rm) = 3.8748473242379418 * rm + -1.4193925091539175, 此时loss是: 57.222926105304886\n",
      "在第331步，我们获得了函数 f(rm) = 3.876104335680807 * rm + -1.4273885072815016, 此时loss是: 57.216375286662384\n",
      "在第332步，我们获得了函数 f(rm) = 3.8773610448472855 * rm + -1.4353825825933164, 此时loss是: 57.2098276182214\n",
      "在第333步，我们获得了函数 f(rm) = 3.8786174518100656 * rm + -1.4433747355517461, 此时loss是: 57.20328309846697\n",
      "在第334步，我们获得了函数 f(rm) = 3.8798735566418197 * rm + -1.4513649666190631, 此时loss是: 57.19674172588521\n",
      "在第335步，我们获得了函数 f(rm) = 3.8811293594152017 * rm + -1.459353276257429, 此时loss是: 57.19020349896242\n",
      "在第336步，我们获得了函数 f(rm) = 3.882384860202848 * rm + -1.4673396649288941, 此时loss是: 57.18366841618607\n",
      "在第337步，我们获得了函数 f(rm) = 3.8836400590773783 * rm + -1.4753241330953977, 此时loss是: 57.1771364760441\n",
      "在第338步，我们获得了函数 f(rm) = 3.884894956111394 * rm + -1.483306681218768, 此时loss是: 57.17060767702519\n",
      "在第339步，我们获得了函数 f(rm) = 3.8861495513774793 * rm + -1.4912873097607222, 此时loss是: 57.16408201761896\n",
      "在第340步，我们获得了函数 f(rm) = 3.887403844948201 * rm + -1.4992660191828662, 此时loss是: 57.15755949631556\n",
      "在第341步，我们获得了函数 f(rm) = 3.8886578368961087 * rm + -1.5072428099466952, 此时loss是: 57.1510401116059\n",
      "在第342步，我们获得了函数 f(rm) = 3.889911527293734 * rm + -1.5152176825135932, 此时loss是: 57.14452386198157\n",
      "在第343步，我们获得了函数 f(rm) = 3.891164916213592 * rm + -1.5231906373448336, 此时loss是: 57.13801074593508\n",
      "在第344步，我们获得了函数 f(rm) = 3.8924180037281793 * rm + -1.5311616749015784, 此时loss是: 57.13150076195945\n",
      "在第345步，我们获得了函数 f(rm) = 3.8936707899099754 * rm + -1.539130795644879, 此时loss是: 57.124993908548554\n",
      "在第346步，我们获得了函数 f(rm) = 3.8949232748314424 * rm + -1.5470980000356758, 此时loss是: 57.11849018419695\n",
      "在第347步，我们获得了函数 f(rm) = 3.8961754585650255 * rm + -1.5550632885347986, 此时loss是: 57.111989587399876\n",
      "在第348步，我们获得了函数 f(rm) = 3.8974273411831515 * rm + -1.563026661602966, 此时loss是: 57.10549211665332\n",
      "在第349步，我们获得了函数 f(rm) = 3.8986789227582306 * rm + -1.5709881197007862, 此时loss是: 57.09899777045409\n",
      "在第350步，我们获得了函数 f(rm) = 3.899930203362656 * rm + -1.5789476632887565, 此时loss是: 57.0925065472995\n",
      "在第351步，我们获得了函数 f(rm) = 3.9011811830688012 * rm + -1.5869052928272631, 此时loss是: 57.08601844568778\n",
      "在第352步，我们获得了函数 f(rm) = 3.9024318619490255 * rm + -1.594861008776582, 此时loss是: 57.079533464117915\n",
      "在第353步，我们获得了函数 f(rm) = 3.903682240075668 * rm + -1.6028148115968783, 此时loss是: 57.07305160108942\n",
      "在第354步，我们获得了函数 f(rm) = 3.904932317521052 * rm + -1.6107667017482066, 此时loss是: 57.06657285510262\n",
      "在第355步，我们获得了函数 f(rm) = 3.906182094357484 * rm + -1.6187166796905106, 此时loss是: 57.06009722465861\n",
      "在第356步，我们获得了函数 f(rm) = 3.90743157065725 * rm + -1.6266647458836236, 此时loss是: 57.05362470825909\n",
      "在第357步，我们获得了函数 f(rm) = 3.9086807464926223 * rm + -1.6346109007872682, 此时loss是: 57.04715530440671\n",
      "在第358步，我们获得了函数 f(rm) = 3.9099296219358544 * rm + -1.6425551448610565, 此时loss是: 57.04068901160452\n",
      "在第359步，我们获得了函数 f(rm) = 3.911178197059181 * rm + -1.6504974785644901, 此时loss是: 57.0342258283566\n",
      "在第360步，我们获得了函数 f(rm) = 3.912426471934822 * rm + -1.6584379023569602, 此时loss是: 57.02776575316761\n",
      "在第361步，我们获得了函数 f(rm) = 3.913674446634978 * rm + -1.666376416697747, 此时loss是: 57.02130878454272\n",
      "在第362步，我们获得了函数 f(rm) = 3.9149221212318333 * rm + -1.6743130220460212, 此时loss是: 57.01485492098823\n",
      "在第363步，我们获得了函数 f(rm) = 3.9161694957975537 * rm + -1.6822477188608422, 此时loss是: 57.00840416101088\n",
      "在第364步，我们获得了函数 f(rm) = 3.917416570404289 * rm + -1.6901805076011596, 此时loss是: 57.00195650311821\n",
      "在第365步，我们获得了函数 f(rm) = 3.91866334512417 * rm + -1.6981113887258121, 此时loss是: 56.9955119458185\n",
      "在第366步，我们获得了函数 f(rm) = 3.919909820029313 * rm + -1.7060403626935288, 此时loss是: 56.98907048762063\n",
      "在第367步，我们获得了函数 f(rm) = 3.921155995191814 * rm + -1.7139674299629275, 此时loss是: 56.98263212703441\n",
      "在第368步，我们获得了函数 f(rm) = 3.9224018706837525 * rm + -1.7218925909925167, 此时loss是: 56.97619686257018\n",
      "在第369步，我们获得了函数 f(rm) = 3.9236474465771916 * rm + -1.729815846240694, 此时loss是: 56.96976469273895\n",
      "在第370步，我们获得了函数 f(rm) = 3.9248927229441755 * rm + -1.737737196165747, 此时loss是: 56.96333561605266\n",
      "在第371步，我们获得了函数 f(rm) = 3.9261376998567328 * rm + -1.7456566412258532, 此时loss是: 56.9569096310239\n",
      "在第372步，我们获得了函数 f(rm) = 3.9273823773868743 * rm + -1.7535741818790795, 此时loss是: 56.95048673616581\n",
      "在第373步，我们获得了函数 f(rm) = 3.928626755606593 * rm + -1.7614898185833832, 此时loss是: 56.94406692999246\n",
      "在第374步，我们获得了函数 f(rm) = 3.929870834587864 * rm + -1.769403551796611, 此时loss是: 56.93765021101855\n",
      "在第375步，我们获得了函数 f(rm) = 3.9311146144026465 * rm + -1.7773153819764997, 此时loss是: 56.931236577759435\n",
      "在第376步，我们获得了函数 f(rm) = 3.9323580951228814 * rm + -1.7852253095806763, 此时loss是: 56.924826028731246\n",
      "在第377步，我们获得了函数 f(rm) = 3.933601276820493 * rm + -1.7931333350666572, 此时loss是: 56.918418562450825\n",
      "在第378步，我们获得了函数 f(rm) = 3.9348441595673878 * rm + -1.8010394588918492, 此时loss是: 56.91201417743569\n",
      "在第379步，我们获得了函数 f(rm) = 3.9360867434354554 * rm + -1.8089436815135491, 此时loss是: 56.905612872204244\n",
      "在第380步，我们获得了函数 f(rm) = 3.937329028496567 * rm + -1.8168460033889435, 此时loss是: 56.899214645275244\n",
      "在第381步，我们获得了函数 f(rm) = 3.938571014822578 * rm + -1.824746424975109, 此时loss是: 56.89281949516848\n",
      "在第382步，我们获得了函数 f(rm) = 3.9398127024853262 * rm + -1.8326449467290127, 此时loss是: 56.88642742040439\n",
      "在第383步，我们获得了函数 f(rm) = 3.941054091556631 * rm + -1.8405415691075115, 此时loss是: 56.88003841950398\n",
      "在第384步，我们获得了函数 f(rm) = 3.942295182108296 * rm + -1.8484362925673525, 此时loss是: 56.87365249098922\n",
      "在第385步，我们获得了函数 f(rm) = 3.943535974212107 * rm + -1.8563291175651728, 此时loss是: 56.867269633382485\n",
      "在第386步，我们获得了函数 f(rm) = 3.9447764679398327 * rm + -1.8642200445575001, 此时loss是: 56.86088984520715\n",
      "在第387步，我们获得了函数 f(rm) = 3.9460166633632228 * rm + -1.872109074000752, 此时loss是: 56.85451312498699\n",
      "在第388步，我们获得了函数 f(rm) = 3.9472565605540124 * rm + -1.8799962063512363, 此时loss是: 56.848139471246846\n",
      "在第389步，我们获得了函数 f(rm) = 3.9484961595839185 * rm + -1.8878814420651513, 此时loss是: 56.841768882512\n",
      "在第390步，我们获得了函数 f(rm) = 3.9497354605246398 * rm + -1.8957647815985854, 此时loss是: 56.83540135730857\n",
      "在第391步，我们获得了函数 f(rm) = 3.9509744634478583 * rm + -1.9036462254075175, 此时loss是: 56.82903689416336\n",
      "在第392步，我们获得了函数 f(rm) = 3.9522131684252395 * rm + -1.9115257739478169, 此时loss是: 56.82267549160371\n",
      "在第393步，我们获得了函数 f(rm) = 3.953451575528431 * rm + -1.919403427675243, 此时loss是: 56.81631714815803\n",
      "在第394步，我们获得了函数 f(rm) = 3.954689684829063 * rm + -1.9272791870454455, 此时loss是: 56.809961862355124\n",
      "在第395步，我们获得了函数 f(rm) = 3.955927496398749 * rm + -1.935153052513965, 此时loss是: 56.803609632724665\n",
      "在第396步，我们获得了函数 f(rm) = 3.957165010309085 * rm + -1.9430250245362326, 此时loss是: 56.79726045779695\n",
      "在第397步，我们获得了函数 f(rm) = 3.95840222663165 * rm + -1.950895103567569, 此时loss是: 56.79091433610295\n",
      "在第398步，我们获得了函数 f(rm) = 3.959639145438005 * rm + -1.9587632900631866, 此时loss是: 56.78457126617455\n",
      "在第399步，我们获得了函数 f(rm) = 3.9608757667996946 * rm + -1.9666295844781874, 此时loss是: 56.77823124654406\n",
      "在第400步，我们获得了函数 f(rm) = 3.9621120907882466 * rm + -1.9744939872675642, 此时loss是: 56.771894275744756\n",
      "在第401步，我们获得了函数 f(rm) = 3.963348117475171 * rm + -1.9823564988862008, 此时loss是: 56.76556035231039\n",
      "在第402步，我们获得了函数 f(rm) = 3.9645838469319594 * rm + -1.9902171197888712, 此时loss是: 56.75922947477555\n",
      "在第403步，我们获得了函数 f(rm) = 3.9658192792300886 * rm + -1.9980758504302403, 此时loss是: 56.752901641675564\n",
      "在第404步，我们获得了函数 f(rm) = 3.9670544144410163 * rm + -2.005932691264863, 此时loss是: 56.74657685154627\n",
      "在第405步，我们获得了函数 f(rm) = 3.9682892526361844 * rm + -2.0137876427471864, 此时loss是: 56.74025510292452\n",
      "在第406步，我们获得了函数 f(rm) = 3.9695237938870163 * rm + -2.021640705331546, 此时loss是: 56.733936394347545\n",
      "在第407步，我们获得了函数 f(rm) = 3.9707580382649192 * rm + -2.0294918794721704, 此时loss是: 56.72762072435349\n",
      "在第408步，我们获得了函数 f(rm) = 3.971991985841283 * rm + -2.0373411656231775, 此时loss是: 56.72130809148117\n",
      "在第409步，我们获得了函数 f(rm) = 3.97322563668748 * rm + -2.0451885642385763, 此时loss是: 56.714998494270006\n",
      "在第410步，我们获得了函数 f(rm) = 3.9744589908748647 * rm + -2.0530340757722674, 此时loss是: 56.70869193126028\n",
      "在第411步，我们获得了函数 f(rm) = 3.9756920484747766 * rm + -2.060877700678041, 此时loss是: 56.70238840099283\n",
      "在第412步，我们获得了函数 f(rm) = 3.976924809558537 * rm + -2.068719439409579, 此时loss是: 56.696087902009154\n",
      "在第413步，我们获得了函数 f(rm) = 3.9781572741974487 * rm + -2.076559292420454, 此时loss是: 56.68979043285177\n",
      "在第414步，我们获得了函数 f(rm) = 3.979389442462799 * rm + -2.08439726016413, 此时loss是: 56.68349599206351\n",
      "在第415步，我们获得了函数 f(rm) = 3.9806213144258575 * rm + -2.0922333430939606, 此时loss是: 56.677204578188025\n",
      "在第416步，我们获得了函数 f(rm) = 3.9818528901578767 * rm + -2.1000675416631918, 此时loss是: 56.67091618976986\n",
      "在第417步，我们获得了函数 f(rm) = 3.9830841697300916 * rm + -2.1078998563249596, 此时loss是: 56.66463082535406\n",
      "在第418步，我们获得了函数 f(rm) = 3.9843151532137204 * rm + -2.115730287532292, 此时loss是: 56.65834848348641\n",
      "在第419步，我们获得了函数 f(rm) = 3.985545840679965 * rm + -2.123558835738107, 此时loss是: 56.652069162713396\n",
      "在第420步，我们获得了函数 f(rm) = 3.986776232200009 * rm + -2.131385501395215, 此时loss是: 56.64579286158231\n",
      "在第421步，我们获得了函数 f(rm) = 3.988006327845019 * rm + -2.139210284956316, 此时loss是: 56.63951957864086\n",
      "在第422步，我们获得了函数 f(rm) = 3.9892361276861448 * rm + -2.1470331868740025, 此时loss是: 56.63324931243774\n",
      "在第423步，我们获得了函数 f(rm) = 3.990465631794519 * rm + -2.154854207600757, 此时loss是: 56.62698206152226\n",
      "在第424步，我们获得了函数 f(rm) = 3.9916948402412573 * rm + -2.162673347588954, 此时loss是: 56.62071782444442\n",
      "在第425步，我们获得了函数 f(rm) = 3.9929237530974575 * rm + -2.170490607290859, 此时loss是: 56.614456599754824\n",
      "在第426步，我们获得了函数 f(rm) = 3.994152370434202 * rm + -2.1783059871586286, 此时loss是: 56.60819838600499\n",
      "在第427步，我们获得了函数 f(rm) = 3.9953806923225548 * rm + -2.186119487644311, 此时loss是: 56.601943181746904\n",
      "在第428步，我们获得了函数 f(rm) = 3.996608718833562 * rm + -2.193931109199845, 此时loss是: 56.59569098553332\n",
      "在第429步，我们获得了函数 f(rm) = 3.997836450038255 * rm + -2.2017408522770614, 此时loss是: 56.589441795917764\n",
      "在第430步，我们获得了函数 f(rm) = 3.999063886007646 * rm + -2.2095487173276824, 此时loss是: 56.583195611454364\n",
      "在第431步，我们获得了函数 f(rm) = 4.0002910268127305 * rm + -2.217354704803321, 此时loss是: 56.57695243069797\n",
      "在第432步，我们获得了函数 f(rm) = 4.001517872524488 * rm + -2.2251588151554818, 此时loss是: 56.570712252204196\n",
      "在第433步，我们获得了函数 f(rm) = 4.002744423213881 * rm + -2.2329610488355613, 此时loss是: 56.56447507452933\n",
      "在第434步，我们获得了函数 f(rm) = 4.003970678951853 * rm + -2.240761406294847, 此时loss是: 56.558240896230124\n",
      "在第435步，我们获得了函数 f(rm) = 4.0051966398093315 * rm + -2.248559887984518, 此时loss是: 56.55200971586443\n",
      "在第436步，我们获得了函数 f(rm) = 4.006422305857228 * rm + -2.2563564943556447, 此时loss是: 56.54578153199057\n",
      "在第437步，我们获得了函数 f(rm) = 4.007647677166435 * rm + -2.264151225859189, 此时loss是: 56.539556343167334\n",
      "在第438步，我们获得了函数 f(rm) = 4.008872753807831 * rm + -2.271944082946005, 此时loss是: 56.53333414795481\n",
      "在第439步，我们获得了函数 f(rm) = 4.010097535852272 * rm + -2.279735066066838, 此时loss是: 56.52711494491303\n",
      "在第440步，我们获得了函数 f(rm) = 4.011322023370604 * rm + -2.287524175672324, 此时loss是: 56.52089873260336\n",
      "在第441步，我们获得了函数 f(rm) = 4.01254621643365 * rm + -2.2953114122129925, 此时loss是: 56.51468550958749\n",
      "在第442步，我们获得了函数 f(rm) = 4.013770115112219 * rm + -2.303096776139263, 此时loss是: 56.50847527442797\n",
      "在第443步，我们获得了函数 f(rm) = 4.014993719477103 * rm + -2.3108802679014477, 此时loss是: 56.50226802568789\n",
      "在第444步，我们获得了函数 f(rm) = 4.016217029599075 * rm + -2.31866188794975, 此时loss是: 56.49606376193121\n",
      "在第445步，我们获得了函数 f(rm) = 4.017440045548894 * rm + -2.326441636734265, 此时loss是: 56.48986248172245\n",
      "在第446步，我们获得了函数 f(rm) = 4.0186627673972986 * rm + -2.3342195147049796, 此时loss是: 56.483664183626836\n",
      "在第447步，我们获得了函数 f(rm) = 4.0198851952150125 * rm + -2.341995522311773, 此时loss是: 56.47746886621039\n",
      "在第448步，我们获得了函数 f(rm) = 4.021107329072742 * rm + -2.3497696600044162, 此时loss是: 56.47127652803973\n",
      "在第449步，我们获得了函数 f(rm) = 4.022329169041177 * rm + -2.3575419282325707, 此时loss是: 56.46508716768202\n",
      "在第450步，我们获得了函数 f(rm) = 4.0235507151909875 * rm + -2.3653123274457917, 此时loss是: 56.458900783705495\n",
      "在第451步，我们获得了函数 f(rm) = 4.024771967592832 * rm + -2.373080858093525, 此时loss是: 56.45271737467862\n",
      "在第452步，我们获得了函数 f(rm) = 4.025992926317346 * rm + -2.380847520625109, 此时loss是: 56.44653693917103\n",
      "在第453步，我们获得了函数 f(rm) = 4.027213591435152 * rm + -2.3886123154897736, 此时loss是: 56.44035947575266\n",
      "在第454步，我们获得了函数 f(rm) = 4.028433963016854 * rm + -2.396375243136641, 此时loss是: 56.43418498299424\n",
      "在第455步，我们获得了函数 f(rm) = 4.02965404113304 * rm + -2.4041363040147252, 此时loss是: 56.42801345946731\n",
      "在第456步，我们获得了函数 f(rm) = 4.030873825854279 * rm + -2.4118954985729326, 此时loss是: 56.421844903743896\n",
      "在第457步，我们获得了函数 f(rm) = 4.0320933172511255 * rm + -2.419652827260061, 此时loss是: 56.415679314396996\n",
      "在第458步，我们获得了函数 f(rm) = 4.033312515394115 * rm + -2.427408290524801, 此时loss是: 56.40951668999996\n",
      "在第459步，我们获得了函数 f(rm) = 4.034531420353768 * rm + -2.4351618888157347, 此时loss是: 56.40335702912703\n",
      "在第460步，我们获得了函数 f(rm) = 4.0357500322005855 * rm + -2.4429136225813366, 此时loss是: 56.39720033035305\n",
      "在第461步，我们获得了函数 f(rm) = 4.036968351005054 * rm + -2.4506634922699733, 此时loss是: 56.39104659225371\n",
      "在第462步，我们获得了函数 f(rm) = 4.0381863768376425 * rm + -2.458411498329904, 此时loss是: 56.384895813405095\n",
      "在第463步，我们获得了函数 f(rm) = 4.039404109768801 * rm + -2.466157641209279, 此时loss是: 56.37874799238432\n",
      "在第464步，我们获得了函数 f(rm) = 4.040621549868965 * rm + -2.473901921356142, 此时loss是: 56.37260312776888\n",
      "在第465步，我们获得了函数 f(rm) = 4.041838697208553 * rm + -2.4816443392184286, 此时loss是: 56.366461218136976\n",
      "在第466步，我们获得了函数 f(rm) = 4.043055551857965 * rm + -2.4893848952439663, 此时loss是: 56.36032226206789\n",
      "在第467步，我们获得了函数 f(rm) = 4.044272113887585 * rm + -2.4971235898804753, 此时loss是: 56.35418625814106\n",
      "在第468步，我们获得了函数 f(rm) = 4.045488383367781 * rm + -2.5048604235755683, 此时loss是: 56.34805320493698\n",
      "在第469步，我们获得了函数 f(rm) = 4.046704360368901 * rm + -2.51259539677675, 此时loss是: 56.3419231010366\n",
      "在第470步，我们获得了函数 f(rm) = 4.047920044961279 * rm + -2.5203285099314168, 此时loss是: 56.335795945021545\n",
      "在第471步，我们获得了函数 f(rm) = 4.049135437215232 * rm + -2.5280597634868593, 此时loss是: 56.32967173547445\n",
      "在第472步，我们获得了函数 f(rm) = 4.050350537201058 * rm + -2.5357891578902594, 此时loss是: 56.32355047097822\n",
      "在第473步，我们获得了函数 f(rm) = 4.05156534498904 * rm + -2.5435166935886913, 此时loss是: 56.31743215011673\n",
      "在第474步，我们获得了函数 f(rm) = 4.052779860649443 * rm + -2.551242371029122, 此时loss是: 56.311316771474274\n",
      "在第475步，我们获得了函数 f(rm) = 4.053994084252516 * rm + -2.5589661906584107, 此时loss是: 56.30520433363614\n",
      "在第476步，我们获得了函数 f(rm) = 4.055208015868492 * rm + -2.56668815292331, 此时loss是: 56.299094835188\n",
      "在第477步，我们获得了函数 f(rm) = 4.056421655567583 * rm + -2.5744082582704646, 此时loss是: 56.29298827471652\n",
      "在第478步，我们获得了函数 f(rm) = 4.057635003419989 * rm + -2.5821265071464112, 此时loss是: 56.28688465080868\n",
      "在第479步，我们获得了函数 f(rm) = 4.058848059495891 * rm + -2.58984289999758, 此时loss是: 56.28078396205241\n",
      "在第480步，我们获得了函数 f(rm) = 4.060060823865452 * rm + -2.5975574372702934, 此时loss是: 56.27468620703625\n",
      "在第481步，我们获得了函数 f(rm) = 4.06127329659882 * rm + -2.6052701194107666, 此时loss是: 56.26859138434936\n",
      "在第482步，我们获得了函数 f(rm) = 4.062485477766126 * rm + -2.612980946865107, 此时loss是: 56.26249949258161\n",
      "在第483步，我们获得了函数 f(rm) = 4.063697367437482 * rm + -2.620689920079316, 此时loss是: 56.25641053032364\n",
      "在第484步，我们获得了函数 f(rm) = 4.064908965682985 * rm + -2.628397039499286, 此时loss是: 56.25032449616665\n",
      "在第485步，我们获得了函数 f(rm) = 4.066120272572716 * rm + -2.636102305570804, 此时loss是: 56.24424138870255\n",
      "在第486步，我们获得了函数 f(rm) = 4.067331288176738 * rm + -2.643805718739548, 此时loss是: 56.23816120652385\n",
      "在第487步，我们获得了函数 f(rm) = 4.0685420125650955 * rm + -2.6515072794510903, 此时loss是: 56.23208394822395\n",
      "在第488步，我们获得了函数 f(rm) = 4.069752445807819 * rm + -2.6592069881508955, 此时loss是: 56.22600961239673\n",
      "在第489步，我们获得了函数 f(rm) = 4.070962587974922 * rm + -2.666904845284321, 此时loss是: 56.2199381976368\n",
      "在第490步，我们获得了函数 f(rm) = 4.072172439136398 * rm + -2.6746008512966166, 此时loss是: 56.213869702539505\n",
      "在第491步，我们获得了函数 f(rm) = 4.073381999362226 * rm + -2.682295006632926, 此时loss是: 56.207804125700775\n",
      "在第492步，我们获得了函数 f(rm) = 4.074591268722369 * rm + -2.6899873117382858, 此时loss是: 56.20174146571725\n",
      "在第493步，我们获得了函数 f(rm) = 4.075800247286772 * rm + -2.6976777670576246, 此时loss是: 56.19568172118636\n",
      "在第494步，我们获得了函数 f(rm) = 4.077008935125362 * rm + -2.705366373035765, 此时loss是: 56.18962489070594\n",
      "在第495步，我们获得了函数 f(rm) = 4.078217332308053 * rm + -2.7130531301174226, 此时loss是: 56.18357097287483\n",
      "在第496步，我们获得了函数 f(rm) = 4.079425438904737 * rm + -2.7207380387472053, 此时loss是: 56.177519966292245\n",
      "在第497步，我们获得了函数 f(rm) = 4.080633254985294 * rm + -2.7284210993696143, 此时loss是: 56.17147186955826\n",
      "在第498步，我们获得了函数 f(rm) = 4.081840780619584 * rm + -2.7361023124290447, 此时loss是: 56.165426681273516\n",
      "在第499步，我们获得了函数 f(rm) = 4.08304801587745 * rm + -2.7437816783697837, 此时loss是: 56.159384400039414\n",
      "在第500步，我们获得了函数 f(rm) = 4.084254960828722 * rm + -2.751459197636012, 此时loss是: 56.15334502445802\n",
      "在第501步，我们获得了函数 f(rm) = 4.085461615543211 * rm + -2.759134870671804, 此时loss是: 56.14730855313203\n",
      "在第502步，我们获得了函数 f(rm) = 4.0866679800907075 * rm + -2.766808697921127, 此时loss是: 56.14127498466481\n",
      "在第503步，我们获得了函数 f(rm) = 4.0878740545409915 * rm + -2.7744806798278407, 此时loss是: 56.13524431766035\n",
      "在第504步，我们获得了函数 f(rm) = 4.089079838963821 * rm + -2.7821508168356996, 此时loss是: 56.12921655072354\n",
      "在第505步，我们获得了函数 f(rm) = 4.090285333428943 * rm + -2.7898191093883504, 此时loss是: 56.12319168245966\n",
      "在第506步，我们获得了函数 f(rm) = 4.091490538006081 * rm + -2.7974855579293334, 此时loss是: 56.117169711474794\n",
      "在第507步，我们获得了函数 f(rm) = 4.092695452764946 * rm + -2.8051501629020823, 此时loss是: 56.11115063637572\n",
      "在第508步，我们获得了函数 f(rm) = 4.093900077775233 * rm + -2.812812924749924, 此时loss是: 56.10513445576977\n",
      "在第509步，我们获得了函数 f(rm) = 4.095104413106616 * rm + -2.820473843916079, 此时loss是: 56.09912116826505\n",
      "在第510步，我们获得了函数 f(rm) = 4.096308458828755 * rm + -2.8281329208436614, 此时loss是: 56.09311077247039\n",
      "在第511步，我们获得了函数 f(rm) = 4.097512215011295 * rm + -2.835790155975678, 此时loss是: 56.08710326699504\n",
      "在第512步，我们获得了函数 f(rm) = 4.098715681723861 * rm + -2.84344554975503, 此时loss是: 56.08109865044915\n",
      "在第513步，我们获得了函数 f(rm) = 4.0999188590360625 * rm + -2.851099102624511, 此时loss是: 56.07509692144358\n",
      "在第514步，我们获得了函数 f(rm) = 4.101121747017491 * rm + -2.8587508150268097, 此时loss是: 56.0690980785896\n",
      "在第515步，我们获得了函数 f(rm) = 4.102324345737726 * rm + -2.8664006874045067, 此时loss是: 56.06310212049945\n",
      "在第516步，我们获得了函数 f(rm) = 4.1035266552663225 * rm + -2.874048720200077, 此时loss是: 56.05710904578577\n",
      "在第517步，我们获得了函数 f(rm) = 4.104728675672826 * rm + -2.881694913855889, 此时loss是: 56.05111885306199\n",
      "在第518步，我们获得了函数 f(rm) = 4.1059304070267615 * rm + -2.889339268814205, 此时loss是: 56.04513154094219\n",
      "在第519步，我们获得了函数 f(rm) = 4.107131849397638 * rm + -2.8969817855171813, 此时loss是: 56.03914710804123\n",
      "在第520步，我们获得了函数 f(rm) = 4.108333002854948 * rm + -2.9046224644068666, 此时loss是: 56.03316555297442\n",
      "在第521步，我们获得了函数 f(rm) = 4.109533867468168 * rm + -2.912261305925204, 此时loss是: 56.02718687435787\n",
      "在第522步，我们获得了函数 f(rm) = 4.110734443306756 * rm + -2.9198983105140304, 此时loss是: 56.02121107080843\n",
      "在第523步，我们获得了函数 f(rm) = 4.111934730440154 * rm + -2.9275334786150764, 此时loss是: 56.01523814094338\n",
      "在第524步，我们获得了函数 f(rm) = 4.113134728937788 * rm + -2.935166810669967, 此时loss是: 56.00926808338087\n",
      "在第525步，我们获得了函数 f(rm) = 4.114334438869068 * rm + -2.9427983071202193, 此时loss是: 56.003300896739624\n",
      "在第526步，我们获得了函数 f(rm) = 4.115533860303384 * rm + -2.950427968407246, 此时loss是: 55.99733657963912\n",
      "在第527步，我们获得了函数 f(rm) = 4.116732993310114 * rm + -2.9580557949723527, 此时loss是: 55.99137513069936\n",
      "在第528步，我们获得了函数 f(rm) = 4.117931837958614 * rm + -2.9656817872567394, 此时loss是: 55.98541654854104\n",
      "在第529步，我们获得了函数 f(rm) = 4.119130394318229 * rm + -2.9733059457014996, 此时loss是: 55.97946083178577\n",
      "在第530步，我们获得了函数 f(rm) = 4.120328662458283 * rm + -2.980928270747621, 此时loss是: 55.97350797905539\n",
      "在第531步，我们获得了函数 f(rm) = 4.121526642448084 * rm + -2.9885487628359844, 此时loss是: 55.96755798897269\n",
      "在第532步，我们获得了函数 f(rm) = 4.122724334356926 * rm + -2.996167422407366, 此时loss是: 55.96161086016114\n",
      "在第533步，我们获得了函数 f(rm) = 4.123921738254084 * rm + -3.0037842499024356, 此时loss是: 55.955666591244764\n",
      "在第534步，我们获得了函数 f(rm) = 4.125118854208815 * rm + -3.011399245761756, 此时loss是: 55.94972518084818\n",
      "在第535步，我们获得了函数 f(rm) = 4.126315682290365 * rm + -3.0190124104257854, 此时loss是: 55.94378662759688\n",
      "在第536步，我们获得了函数 f(rm) = 4.127512222567955 * rm + -3.026623744334875, 此时loss是: 55.93785093011682\n",
      "在第537步，我们获得了函数 f(rm) = 4.1287084751107965 * rm + -3.034233247929271, 此时loss是: 55.931918087034795\n",
      "在第538步，我们获得了函数 f(rm) = 4.129904439988081 * rm + -3.0418409216491127, 此时loss是: 55.92598809697808\n",
      "在第539步，我们获得了函数 f(rm) = 4.131100117268986 * rm + -3.0494467659344346, 此时loss是: 55.92006095857471\n",
      "在第540步，我们获得了函数 f(rm) = 4.1322955070226675 * rm + -3.0570507812251653, 此时loss是: 55.91413667045336\n",
      "在第541步，我们获得了函数 f(rm) = 4.133490609318269 * rm + -3.0646529679611265, 此时loss是: 55.90821523124339\n",
      "在第542步，我们获得了函数 f(rm) = 4.134685424224916 * rm + -3.0722533265820355, 此时loss是: 55.90229663957479\n",
      "在第543步，我们获得了函数 f(rm) = 4.135879951811718 * rm + -3.079851857527503, 此时loss是: 55.89638089407816\n",
      "在第544步，我们获得了函数 f(rm) = 4.137074192147768 * rm + -3.0874485612370344, 此时loss是: 55.890467993384874\n",
      "在第545步，我们获得了函数 f(rm) = 4.138268145302141 * rm + -3.095043438150029, 此时loss是: 55.884557936126924\n",
      "在第546步，我们获得了函数 f(rm) = 4.139461811343896 * rm + -3.102636488705781, 此时loss是: 55.87865072093693\n",
      "在第547步，我们获得了函数 f(rm) = 4.140655190342076 * rm + -3.1102277133434786, 此时loss是: 55.87274634644809\n",
      "在第548步，我们获得了函数 f(rm) = 4.141848282365707 * rm + -3.1178171125022045, 此时loss是: 55.86684481129443\n",
      "在第549步，我们获得了函数 f(rm) = 4.143041087483799 * rm + -3.1254046866209353, 此时loss是: 55.86094611411056\n",
      "在第550步，我们获得了函数 f(rm) = 4.144233605765344 * rm + -3.132990436138543, 此时loss是: 55.8550502535317\n",
      "在第551步，我们获得了函数 f(rm) = 4.145425837279318 * rm + -3.1405743614937935, 此时loss是: 55.8491572281938\n",
      "在第552步，我们获得了函数 f(rm) = 4.146617782094682 * rm + -3.148156463125347, 此时loss是: 55.84326703673338\n",
      "在第553步，我们获得了函数 f(rm) = 4.147809440280378 * rm + -3.1557367414717588, 此时loss是: 55.83737967778774\n",
      "在第554步，我们获得了函数 f(rm) = 4.149000811905332 * rm + -3.163315196971478, 此时loss是: 55.83149514999465\n",
      "在第555步，我们获得了函数 f(rm) = 4.1501918970384555 * rm + -3.1708918300628492, 此时loss是: 55.825613451992766\n",
      "在第556步，我们获得了函数 f(rm) = 4.15138269574864 * rm + -3.1784666411841105, 此时loss是: 55.81973458242122\n",
      "在第557步，我们获得了函数 f(rm) = 4.152573208104764 * rm + -3.1860396307733954, 此时loss是: 55.81385853991982\n",
      "在第558步，我们获得了函数 f(rm) = 4.153763434175687 * rm + -3.1936107992687317, 此时loss是: 55.80798532312917\n",
      "在第559步，我们获得了函数 f(rm) = 4.154953374030252 * rm + -3.2011801471080426, 此时loss是: 55.80211493069034\n",
      "在第560步，我们获得了函数 f(rm) = 4.156143027737287 * rm + -3.208747674729145, 此时loss是: 55.796247361245086\n",
      "在第561步，我们获得了函数 f(rm) = 4.157332395365603 * rm + -3.21631338256975, 此时loss是: 55.79038261343599\n",
      "在第562步，我们获得了函数 f(rm) = 4.158521476983991 * rm + -3.2238772710674657, 此时loss是: 55.784520685906166\n",
      "在第563步，我们获得了函数 f(rm) = 4.159710272661232 * rm + -3.2314393406597928, 此时loss是: 55.77866157729935\n",
      "在第564步，我们获得了函数 f(rm) = 4.160898782466086 * rm + -3.238999591784128, 此时loss是: 55.772805286259846\n",
      "在第565步，我们获得了函数 f(rm) = 4.162087006467297 * rm + -3.2465580248777623, 此时loss是: 55.766951811432826\n",
      "在第566步，我们获得了函数 f(rm) = 4.163274944733591 * rm + -3.254114640377882, 此时loss是: 55.76110115146407\n",
      "在第567步，我们获得了函数 f(rm) = 4.164462597333683 * rm + -3.2616694387215666, 此时loss是: 55.755253304999805\n",
      "在第568步，我们获得了函数 f(rm) = 4.165649964336266 * rm + -3.2692224203457934, 此时loss是: 55.74940827068713\n",
      "在第569步，我们获得了函数 f(rm) = 4.166837045810018 * rm + -3.2767735856874323, 此时loss是: 55.74356604717374\n",
      "在第570步，我们获得了函数 f(rm) = 4.1680238418236 * rm + -3.284322935183249, 此时loss是: 55.73772663310796\n",
      "在第571步，我们获得了函数 f(rm) = 4.169210352445659 * rm + -3.291870469269904, 此时loss是: 55.73189002713875\n",
      "在第572步，我们获得了函数 f(rm) = 4.170396577744823 * rm + -3.299416188383953, 此时loss是: 55.72605622791568\n",
      "在第573步，我们获得了函数 f(rm) = 4.1715825177897035 * rm + -3.306960092961846, 此时loss是: 55.72022523408909\n",
      "在第574步，我们获得了函数 f(rm) = 4.172768172648897 * rm + -3.314502183439929, 此时loss是: 55.71439704430986\n",
      "在第575步，我们获得了函数 f(rm) = 4.173953542390985 * rm + -3.322042460254443, 此时loss是: 55.70857165722964\n",
      "在第576步，我们获得了函数 f(rm) = 4.175138627084525 * rm + -3.3295809238415237, 此时loss是: 55.702749071500506\n",
      "在第577步，我们获得了函数 f(rm) = 4.176323426798068 * rm + -3.337117574637202, 此时loss是: 55.69692928577547\n",
      "在第578步，我们获得了函数 f(rm) = 4.177507941600141 * rm + -3.344652413077404, 此时loss是: 55.69111229870795\n",
      "在第579步，我们获得了函数 f(rm) = 4.178692171559259 * rm + -3.35218543959795, 此时loss是: 55.68529810895221\n",
      "在第580步，我们获得了函数 f(rm) = 4.179876116743918 * rm + -3.3597166546345574, 此时loss是: 55.67948671516292\n",
      "在第581步，我们获得了函数 f(rm) = 4.181059777222598 * rm + -3.3672460586228374, 此时loss是: 55.67367811599568\n",
      "在第582步，我们获得了函数 f(rm) = 4.182243153063764 * rm + -3.3747736519982974, 此时loss是: 55.66787231010643\n",
      "在第583步，我们获得了函数 f(rm) = 4.1834262443358625 * rm + -3.382299435196339, 此时loss是: 55.662069296152076\n",
      "在第584步，我们获得了函数 f(rm) = 4.184609051107325 * rm + -3.3898234086522603, 此时loss是: 55.65626907279001\n",
      "在第585步，我们获得了函数 f(rm) = 4.185791573446566 * rm + -3.3973455728012536, 此时loss是: 55.65047163867812\n",
      "在第586步，我们获得了函数 f(rm) = 4.186973811421983 * rm + -3.404865928078407, 此时loss是: 55.64467699247526\n",
      "在第587步，我们获得了函数 f(rm) = 4.188155765101958 * rm + -3.4123844749187042, 此时loss是: 55.63888513284066\n",
      "在第588步，我们获得了函数 f(rm) = 4.189337434554856 * rm + -3.419901213757024, 此时loss是: 55.633096058434326\n",
      "在第589步，我们获得了函数 f(rm) = 4.190518819849027 * rm + -3.4274161450281406, 此时loss是: 55.62730976791688\n",
      "在第590步，我们获得了函数 f(rm) = 4.191699921052801 * rm + -3.434929269166724, 此时loss是: 55.62152625994963\n",
      "在第591步，我们获得了函数 f(rm) = 4.1928807382344955 * rm + -3.4424405866073395, 此时loss是: 55.61574553319441\n",
      "在第592步，我们获得了函数 f(rm) = 4.1940612714624095 * rm + -3.449950097784448, 此时loss是: 55.6099675863138\n",
      "在第593步，我们获得了函数 f(rm) = 4.195241520804826 * rm + -3.4574578031324052, 此时loss是: 55.60419241797098\n",
      "在第594步，我们获得了函数 f(rm) = 4.196421486330011 * rm + -3.464963703085463, 此时loss是: 55.598420026829835\n",
      "在第595步，我们获得了函数 f(rm) = 4.197601168106216 * rm + -3.4724677980777696, 此时loss是: 55.59265041155479\n",
      "在第596步，我们获得了函数 f(rm) = 4.198780566201673 * rm + -3.479970088543367, 此时loss是: 55.58688357081107\n",
      "在第597步，我们获得了函数 f(rm) = 4.199959680684601 * rm + -3.4874705749161943, 此时loss是: 55.5811195032643\n",
      "在第598步，我们获得了函数 f(rm) = 4.2011385116232 * rm + -3.494969257630086, 此时loss是: 55.57535820758095\n",
      "在第599步，我们获得了函数 f(rm) = 4.202317059085655 * rm + -3.5024661371187715, 此时loss是: 55.56959968242807\n",
      "在第600步，我们获得了函数 f(rm) = 4.203495323140134 * rm + -3.5099612138158767, 此时loss是: 55.56384392647338\n",
      "在第601步，我们获得了函数 f(rm) = 4.20467330385479 * rm + -3.517454488154923, 此时loss是: 55.558090938385135\n",
      "在第602步，我们获得了函数 f(rm) = 4.205851001297756 * rm + -3.524945960569328, 此时loss是: 55.552340716832404\n",
      "在第603步，我们获得了函数 f(rm) = 4.207028415537152 * rm + -3.5324356314924037, 此时loss是: 55.54659326048469\n",
      "在第604步，我们获得了函数 f(rm) = 4.20820554664108 * rm + -3.539923501357359, 此时loss是: 55.54084856801233\n",
      "在第605步，我们获得了函数 f(rm) = 4.209382394677628 * rm + -3.547409570597299, 此时loss是: 55.53510663808616\n",
      "在第606步，我们获得了函数 f(rm) = 4.210558959714865 * rm + -3.5548938396452234, 此时loss是: 55.529367469377675\n",
      "在第607步，我们获得了函数 f(rm) = 4.211735241820843 * rm + -3.562376308934029, 此时loss是: 55.523631060559254\n",
      "在第608步，我们获得了函数 f(rm) = 4.212911241063601 * rm + -3.5698569788965075, 此时loss是: 55.517897410303426\n",
      "在第609步，我们获得了函数 f(rm) = 4.214086957511159 * rm + -3.577335849965347, 此时loss是: 55.51216651728369\n",
      "在第610步，我们获得了函数 f(rm) = 4.215262391231522 * rm + -3.584812922573132, 此时loss是: 55.506438380174295\n",
      "在第611步，我们获得了函数 f(rm) = 4.216437542292677 * rm + -3.592288197152342, 此时loss是: 55.50071299764985\n",
      "在第612步，我们获得了函数 f(rm) = 4.217612410762598 * rm + -3.5997616741353533, 此时loss是: 55.494990368385594\n",
      "在第613步，我们获得了函数 f(rm) = 4.2187869967092375 * rm + -3.607233353954438, 此时loss是: 55.48927049105778\n",
      "在第614步，我们获得了函数 f(rm) = 4.219961300200535 * rm + -3.614703237041764, 此时loss是: 55.48355336434279\n",
      "在第615步，我们获得了函数 f(rm) = 4.2211353213044145 * rm + -3.6221713238293956, 此时loss是: 55.47783898691809\n",
      "在第616步，我们获得了函数 f(rm) = 4.222309060088782 * rm + -3.6296376147492926, 此时loss是: 55.472127357461396\n",
      "在第617步，我们获得了函数 f(rm) = 4.223482516621527 * rm + -3.637102110233312, 此时loss是: 55.46641847465145\n",
      "在第618步，我们获得了函数 f(rm) = 4.224655690970522 * rm + -3.644564810713206, 此时loss是: 55.46071233716729\n",
      "在第619步，我们获得了函数 f(rm) = 4.2258285832036275 * rm + -3.652025716620623, 此时loss是: 55.455008943688696\n",
      "在第620步，我们获得了函数 f(rm) = 4.227001193388682 * rm + -3.659484828387108, 此时loss是: 55.4493082928962\n",
      "在第621步，我们获得了函数 f(rm) = 4.2281735215935115 * rm + -3.666942146444103, 此时loss是: 55.44361038347087\n",
      "在第622步，我们获得了函数 f(rm) = 4.2293455678859235 * rm + -3.6743976712229447, 此时loss是: 55.43791521409443\n",
      "在第623步，我们获得了函数 f(rm) = 4.230517332333711 * rm + -3.6818514031548664, 此时loss是: 55.43222278344922\n",
      "在第624步，我们获得了函数 f(rm) = 4.231688815004649 * rm + -3.6893033426709985, 此时loss是: 55.42653309021814\n",
      "在第625步，我们获得了函数 f(rm) = 4.232860015966497 * rm + -3.6967534902023673, 此时loss是: 55.42084613308489\n",
      "在第626步，我们获得了函数 f(rm) = 4.234030935287 * rm + -3.7042018461798953, 此时loss是: 55.415161910733616\n",
      "在第627步，我们获得了函数 f(rm) = 4.235201573033883 * rm + -3.711648411034402, 此时loss是: 55.409480421849366\n",
      "在第628步，我们获得了函数 f(rm) = 4.236371929274856 * rm + -3.719093185196602, 此时loss是: 55.403801665117506\n",
      "在第629步，我们获得了函数 f(rm) = 4.237542004077616 * rm + -3.7265361690971077, 此时loss是: 55.39812563922416\n",
      "在第630步，我们获得了函数 f(rm) = 4.238711797509839 * rm + -3.733977363166427, 此时loss是: 55.39245234285635\n",
      "在第631步，我们获得了函数 f(rm) = 4.239881309639187 * rm + -3.741416767834965, 此时loss是: 55.38678177470117\n",
      "在第632步，我们获得了函数 f(rm) = 4.2410505405333065 * rm + -3.748854383533023, 此时loss是: 55.3811139334469\n",
      "在第633步，我们获得了函数 f(rm) = 4.242219490259826 * rm + -3.756290210690798, 此时loss是: 55.37544881778207\n",
      "在第634步，我们获得了函数 f(rm) = 4.24338815888636 * rm + -3.7637242497383854, 此时loss是: 55.36978642639598\n",
      "在第635步，我们获得了函数 f(rm) = 4.244556546480502 * rm + -3.7711565011057755, 此时loss是: 55.36412675797864\n",
      "在第636步，我们获得了函数 f(rm) = 4.2457246531098365 * rm + -3.778586965222856, 此时loss是: 55.358469811220594\n",
      "在第637步，我们获得了函数 f(rm) = 4.246892478841925 * rm + -3.786015642519411, 此时loss是: 55.352815584812916\n",
      "在第638步，我们获得了函数 f(rm) = 4.248060023744316 * rm + -3.793442533425121, 此时loss是: 55.34716407744755\n",
      "在第639步，我们获得了函数 f(rm) = 4.249227287884541 * rm + -3.800867638369564, 此时loss是: 55.341515287816925\n",
      "在第640步，我们获得了函数 f(rm) = 4.2503942713301175 * rm + -3.808290957782214, 此时loss是: 55.33586921461419\n",
      "在第641步，我们获得了函数 f(rm) = 4.251560974148543 * rm + -3.8157124920924415, 此时loss是: 55.33022585653286\n",
      "在第642步，我们获得了函数 f(rm) = 4.2527273964073 * rm + -3.8231322417295144, 此时loss是: 55.32458521226737\n",
      "在第643步，我们获得了函数 f(rm) = 4.253893538173856 * rm + -3.830550207122597, 此时loss是: 55.31894728051275\n",
      "在第644步，我们获得了函数 f(rm) = 4.2550593995156625 * rm + -3.8379663887007505, 此时loss是: 55.31331205996452\n",
      "在第645步，我们获得了函数 f(rm) = 4.256224980500153 * rm + -3.845380786892933, 此时loss是: 55.30767954931884\n",
      "在第646步，我们获得了函数 f(rm) = 4.257390281194746 * rm + -3.852793402127999, 此时loss是: 55.30204974727272\n",
      "在第647步，我们获得了函数 f(rm) = 4.258555301666843 * rm + -3.8602042348347005, 此时loss是: 55.296422652523404\n",
      "在第648步，我们获得了函数 f(rm) = 4.2597200419838295 * rm + -3.8676132854416867, 此时loss是: 55.29079826376917\n",
      "在第649步，我们获得了函数 f(rm) = 4.260884502213076 * rm + -3.8750205543775023, 此时loss是: 55.285176579708754\n",
      "在第650步，我们获得了函数 f(rm) = 4.262048682421936 * rm + -3.8824260420705903, 此时loss是: 55.27955759904139\n",
      "在第651步，我们获得了函数 f(rm) = 4.263212582677745 * rm + -3.88982974894929, 此时loss是: 55.27394132046707\n",
      "在第652步，我们获得了函数 f(rm) = 4.264376203047825 * rm + -3.8972316754418377, 此时loss是: 55.26832774268642\n",
      "在第653步，我们获得了函数 f(rm) = 4.265539543599481 * rm + -3.9046318219763667, 此时loss是: 55.262716864400744\n",
      "在第654步，我们获得了函数 f(rm) = 4.266702604400001 * rm + -3.9120301889809084, 此时loss是: 55.2571086843117\n",
      "在第655步，我们获得了函数 f(rm) = 4.267865385516658 * rm + -3.9194267768833897, 此时loss是: 55.25150320112191\n",
      "在第656步，我们获得了函数 f(rm) = 4.2690278870167075 * rm + -3.9268215861116356, 此时loss是: 55.24590041353445\n",
      "在第657步，我们获得了函数 f(rm) = 4.27019010896739 * rm + -3.9342146170933674, 此时loss是: 55.24030032025306\n",
      "在第658步，我们获得了函数 f(rm) = 4.2713520514359296 * rm + -3.9416058702562045, 此时loss是: 55.23470291998205\n",
      "在第659步，我们获得了函数 f(rm) = 4.272513714489533 * rm + -3.948995346027663, 此时loss是: 55.22910821142621\n",
      "在第660步，我们获得了函数 f(rm) = 4.273675098195393 * rm + -3.9563830448351562, 此时loss是: 55.22351619329154\n",
      "在第661步，我们获得了函数 f(rm) = 4.274836202620684 * rm + -3.963768967105995, 此时loss是: 55.21792686428387\n",
      "在第662步，我们获得了函数 f(rm) = 4.275997027832566 * rm + -3.9711531132673863, 此时loss是: 55.21234022311023\n",
      "在第663步，我们获得了函数 f(rm) = 4.277157573898181 * rm + -3.978535483746436, 此时loss是: 55.20675626847804\n",
      "在第664步，我们获得了函数 f(rm) = 4.278317840884657 * rm + -3.9859160789701464, 此时loss是: 55.20117499909535\n",
      "在第665步，我们获得了函数 f(rm) = 4.279477828859105 * rm + -3.993294899365417, 此时loss是: 55.19559641367094\n",
      "在第666步，我们获得了函数 f(rm) = 4.280637537888619 * rm + -4.000671945359044, 此时loss是: 55.190020510913946\n",
      "在第667步，我们获得了函数 f(rm) = 4.281796968040277 * rm + -4.008047217377723, 此时loss是: 55.18444728953455\n",
      "在第668步，我们获得了函数 f(rm) = 4.282956119381142 * rm + -4.0154207158480455, 此时loss是: 55.17887674824314\n",
      "在第669步，我们获得了函数 f(rm) = 4.284114991978261 * rm + -4.022792441196501, 此时loss是: 55.173308885750984\n",
      "在第670步，我们获得了函数 f(rm) = 4.285273585898663 * rm + -4.030162393849475, 此时loss是: 55.16774370076976\n",
      "在第671步，我们获得了函数 f(rm) = 4.286431901209362 * rm + -4.0375305742332515, 此时loss是: 55.162181192012035\n",
      "在第672步，我们获得了函数 f(rm) = 4.287589937977357 * rm + -4.044896982774013, 此时loss是: 55.15662135819081\n",
      "在第673步，我们获得了函数 f(rm) = 4.2887476962696285 * rm + -4.0522616198978385, 此时loss是: 55.151064198019654\n",
      "在第674步，我们获得了函数 f(rm) = 4.289905176153143 * rm + -4.059624486030705, 此时loss是: 55.14550971021306\n",
      "在第675步，我们获得了函数 f(rm) = 4.29106237769485 * rm + -4.066985581598486, 此时loss是: 55.13995789348568\n",
      "在第676步，我们获得了函数 f(rm) = 4.2922193009616825 * rm + -4.074344907026953, 此时loss是: 55.13440874655309\n",
      "在第677步，我们获得了函数 f(rm) = 4.293375946020559 * rm + -4.081702462741776, 此时loss是: 55.1288622681315\n",
      "在第678步，我们获得了函数 f(rm) = 4.2945323129383794 * rm + -4.089058249168523, 此时loss是: 55.12331845693769\n",
      "在第679步，我们获得了函数 f(rm) = 4.295688401782029 * rm + -4.096412266732657, 此时loss是: 55.11777731168884\n",
      "在第680步，我们获得了函数 f(rm) = 4.296844212618378 * rm + -4.103764515859542, 此时loss是: 55.11223883110307\n",
      "在第681步，我们获得了函数 f(rm) = 4.2979997455142795 * rm + -4.111114996974436, 此时loss是: 55.10670301389895\n",
      "在第682步，我们获得了函数 f(rm) = 4.29915500053657 * rm + -4.118463710502499, 此时loss是: 55.10116985879568\n",
      "在第683步，我们获得了函数 f(rm) = 4.30030997775207 * rm + -4.125810656868785, 此时loss是: 55.095639364513175\n",
      "在第684步，我们获得了函数 f(rm) = 4.301464677227584 * rm + -4.133155836498248, 此时loss是: 55.090111529771775\n",
      "在第685步，我们获得了函数 f(rm) = 4.3026190990299025 * rm + -4.14049924981574, 此时loss是: 55.084586353292565\n",
      "在第686步，我们获得了函数 f(rm) = 4.3037732432257965 * rm + -4.147840897246009, 此时loss是: 55.07906383379732\n",
      "在第687步，我们获得了函数 f(rm) = 4.304927109882023 * rm + -4.155180779213701, 此时loss是: 55.07354397000814\n",
      "在第688步，我们获得了函数 f(rm) = 4.306080699065323 * rm + -4.1625188961433635, 此时loss是: 55.06802676064808\n",
      "在第689步，我们获得了函数 f(rm) = 4.307234010842421 * rm + -4.169855248459437, 此时loss是: 55.06251220444071\n",
      "在第690步，我们获得了函数 f(rm) = 4.308387045280026 * rm + -4.177189836586263, 此时loss是: 55.057000300109955\n",
      "在第691步，我们获得了函数 f(rm) = 4.309539802444829 * rm + -4.18452266094808, 此时loss是: 55.05149104638081\n",
      "在第692步，我们获得了函数 f(rm) = 4.310692282403507 * rm + -4.191853721969024, 此时loss是: 55.04598444197842\n",
      "在第693步，我们获得了函数 f(rm) = 4.311844485222721 * rm + -4.19918302007313, 此时loss是: 55.04048048562883\n",
      "在第694步，我们获得了函数 f(rm) = 4.312996410969115 * rm + -4.206510555684331, 此时loss是: 55.03497917605875\n",
      "在第695步，我们获得了函数 f(rm) = 4.314148059709318 * rm + -4.213836329226457, 此时loss是: 55.02948051199518\n",
      "在第696步，我们获得了函数 f(rm) = 4.31529943150994 * rm + -4.2211603411232375, 此时loss是: 55.023984492166065\n",
      "在第697步，我们获得了函数 f(rm) = 4.31645052643758 * rm + -4.228482591798298, 此时loss是: 55.018491115299796\n",
      "在第698步，我们获得了函数 f(rm) = 4.317601344558817 * rm + -4.235803081675165, 此时loss是: 55.01300038012539\n",
      "在第699步，我们获得了函数 f(rm) = 4.318751885940216 * rm + -4.243121811177261, 此时loss是: 55.00751228537253\n",
      "在第700步，我们获得了函数 f(rm) = 4.319902150648324 * rm + -4.250438780727907, 此时loss是: 55.00202682977141\n",
      "在第701步，我们获得了函数 f(rm) = 4.321052138749675 * rm + -4.257753990750323, 此时loss是: 54.99654401205294\n",
      "在第702步，我们获得了函数 f(rm) = 4.322201850310782 * rm + -4.265067441667626, 此时loss是: 54.99106383094863\n",
      "在第703步，我们获得了函数 f(rm) = 4.323351285398149 * rm + -4.272379133902833, 此时loss是: 54.98558628519049\n",
      "在第704步，我们获得了函数 f(rm) = 4.324500444078258 * rm + -4.2796890678788575, 此时loss是: 54.980111373511214\n",
      "在第705步，我们获得了函数 f(rm) = 4.325649326417579 * rm + -4.2869972440185125, 此时loss是: 54.97463909464425\n",
      "在第706步，我们获得了函数 f(rm) = 4.326797932482563 * rm + -4.294303662744508, 此时loss是: 54.96916944732333\n",
      "在第707步，我们获得了函数 f(rm) = 4.327946262339647 * rm + -4.301608324479455, 此时loss是: 54.963702430283114\n",
      "在第708步，我们获得了函数 f(rm) = 4.32909431605525 * rm + -4.308911229645859, 此时loss是: 54.95823804225867\n",
      "在第709步，我们获得了函数 f(rm) = 4.3302420936957775 * rm + -4.316212378666127, 此时loss是: 54.952776281985685\n",
      "在第710步，我们获得了函数 f(rm) = 4.331389595327618 * rm + -4.323511771962564, 此时loss是: 54.94731714820068\n",
      "在第711步，我们获得了函数 f(rm) = 4.332536821017143 * rm + -4.330809409957372, 此时loss是: 54.94186063964044\n",
      "在第712步，我们获得了函数 f(rm) = 4.33368377083071 * rm + -4.338105293072654, 此时loss是: 54.93640675504257\n",
      "在第713步，我们获得了函数 f(rm) = 4.33483044483466 * rm + -4.3453994217304075, 此时loss是: 54.93095549314532\n",
      "在第714步，我们获得了函数 f(rm) = 4.335976843095316 * rm + -4.3526917963525324, 此时loss是: 54.92550685268748\n",
      "在第715步，我们获得了函数 f(rm) = 4.337122965678987 * rm + -4.359982417360825, 此时loss是: 54.92006083240826\n",
      "在第716步，我们获得了函数 f(rm) = 4.338268812651966 * rm + -4.36727128517698, 此时loss是: 54.91461743104782\n",
      "在第717步，我们获得了函数 f(rm) = 4.339414384080531 * rm + -4.374558400222594, 此时loss是: 54.909176647346634\n",
      "在第718步，我们获得了函数 f(rm) = 4.340559680030941 * rm + -4.381843762919158, 此时loss是: 54.903738480045995\n",
      "在第719步，我们获得了函数 f(rm) = 4.341704700569441 * rm + -4.389127373688063, 此时loss是: 54.8983029278877\n",
      "在第720步，我们获得了函数 f(rm) = 4.342849445762259 * rm + -4.3964092329505995, 此时loss是: 54.89286998961419\n",
      "在第721步，我们获得了函数 f(rm) = 4.343993915675611 * rm + -4.403689341127956, 此时loss是: 54.887439663968394\n",
      "在第722步，我们获得了函数 f(rm) = 4.345138110375692 * rm + -4.410967698641221, 此时loss是: 54.88201194969401\n",
      "在第723步，我们获得了函数 f(rm) = 4.346282029928683 * rm + -4.4182443059113785, 此时loss是: 54.87658684553512\n",
      "在第724步，我们获得了函数 f(rm) = 4.347425674400751 * rm + -4.425519163359315, 此时loss是: 54.87116435023679\n",
      "在第725步，我们获得了函数 f(rm) = 4.348569043858043 * rm + -4.432792271405814, 此时loss是: 54.865744462544306\n",
      "在第726步，我们获得了函数 f(rm) = 4.3497121383666935 * rm + -4.440063630471559, 此时loss是: 54.8603271812037\n",
      "在第727步，我们获得了函数 f(rm) = 4.35085495799282 * rm + -4.447333240977129, 此时loss是: 54.85491250496172\n",
      "在第728步，我们获得了函数 f(rm) = 4.351997502802524 * rm + -4.454601103343006, 此时loss是: 54.84950043256542\n",
      "在第729步，我们获得了函数 f(rm) = 4.353139772861892 * rm + -4.461867217989569, 此时loss是: 54.844090962762735\n",
      "在第730步，我们获得了函数 f(rm) = 4.354281768236993 * rm + -4.469131585337096, 此时loss是: 54.838684094302266\n",
      "在第731步，我们获得了函数 f(rm) = 4.355423488993882 * rm + -4.476394205805763, 此时loss是: 54.833279825932834\n",
      "在第732步，我们获得了函数 f(rm) = 4.356564935198595 * rm + -4.483655079815646, 此时loss是: 54.82787815640424\n",
      "在第733步，我们获得了函数 f(rm) = 4.357706106917156 * rm + -4.490914207786721, 此时loss是: 54.82247908446668\n",
      "在第734步，我们获得了函数 f(rm) = 4.358847004215571 * rm + -4.4981715901388615, 此时loss是: 54.817082608870955\n",
      "在第735步，我们获得了函数 f(rm) = 4.359987627159829 * rm + -4.50542722729184, 此时loss是: 54.81168872836866\n",
      "在第736步，我们获得了函数 f(rm) = 4.361127975815907 * rm + -4.512681119665328, 此时loss是: 54.80629744171169\n",
      "在第737步，我们获得了函数 f(rm) = 4.362268050249762 * rm + -4.519933267678898, 此时loss是: 54.800908747652755\n",
      "在第738步，我们获得了函数 f(rm) = 4.363407850527337 * rm + -4.527183671752019, 此时loss是: 54.79552264494521\n",
      "在第739步，我们获得了函数 f(rm) = 4.36454737671456 * rm + -4.534432332304061, 此时loss是: 54.79013913234275\n",
      "在第740步，我们获得了函数 f(rm) = 4.36568662887734 * rm + -4.541679249754293, 此时loss是: 54.78475820859986\n",
      "在第741步，我们获得了函数 f(rm) = 4.366825607081574 * rm + -4.548924424521881, 此时loss是: 54.77937987247169\n",
      "在第742步，我们获得了函数 f(rm) = 4.367964311393142 * rm + -4.556167857025893, 此时loss是: 54.774004122713855\n",
      "在第743步，我们获得了函数 f(rm) = 4.3691027418779065 * rm + -4.563409547685295, 此时loss是: 54.76863095808258\n",
      "在第744步，我们获得了函数 f(rm) = 4.370240898601715 * rm + -4.570649496918953, 此时loss是: 54.76326037733471\n",
      "在第745步，我们获得了函数 f(rm) = 4.3713787816303995 * rm + -4.5778877051456295, 此时loss是: 54.75789237922771\n",
      "在第746步，我们获得了函数 f(rm) = 4.372516391029777 * rm + -4.58512417278399, 此时loss是: 54.752526962519546\n",
      "在第747步，我们获得了函数 f(rm) = 4.373653726865647 * rm + -4.592358900252598, 此时loss是: 54.74716412596892\n",
      "在第748步，我们获得了函数 f(rm) = 4.374790789203795 * rm + -4.599591887969915, 此时loss是: 54.74180386833517\n",
      "在第749步，我们获得了函数 f(rm) = 4.375927578109987 * rm + -4.606823136354302, 此时loss是: 54.736446188377876\n",
      "在第750步，我们获得了函数 f(rm) = 4.377064093649978 * rm + -4.614052645824023, 此时loss是: 54.73109108485771\n",
      "在第751步，我们获得了函数 f(rm) = 4.378200335889506 * rm + -4.621280416797237, 此时loss是: 54.725738556535575\n",
      "在第752步，我们获得了函数 f(rm) = 4.37933630489429 * rm + -4.628506449692005, 此时loss是: 54.72038860217318\n",
      "在第753步，我们获得了函数 f(rm) = 4.380472000730035 * rm + -4.635730744926287, 此时loss是: 54.715041220532626\n",
      "在第754步，我们获得了函数 f(rm) = 4.381607423462433 * rm + -4.64295330291794, 此时loss是: 54.70969641037676\n",
      "在第755步，我们获得了函数 f(rm) = 4.382742573157156 * rm + -4.6501741240847245, 此时loss是: 54.70435417046905\n",
      "在第756步，我们获得了函数 f(rm) = 4.383877449879862 * rm + -4.657393208844298, 此时loss是: 54.69901449957348\n",
      "在第757步，我们获得了函数 f(rm) = 4.385012053696194 * rm + -4.6646105576142185, 此时loss是: 54.693677396454625\n",
      "在第758步，我们获得了函数 f(rm) = 4.386146384671778 * rm + -4.6718261708119435, 此时loss是: 54.68834285987764\n",
      "在第759步，我们获得了函数 f(rm) = 4.387280442872225 * rm + -4.67904004885483, 此时loss是: 54.683010888608344\n",
      "在第760步，我们获得了函数 f(rm) = 4.388414228363129 * rm + -4.6862521921601346, 此时loss是: 54.67768148141316\n",
      "在第761步，我们获得了函数 f(rm) = 4.38954774121007 * rm + -4.693462601145013, 此时loss是: 54.67235463705902\n",
      "在第762步，我们获得了函数 f(rm) = 4.390680981478611 * rm + -4.700671276226522, 此时loss是: 54.667030354313425\n",
      "在第763步，我们获得了函数 f(rm) = 4.391813949234299 * rm + -4.707878217821618, 此时loss是: 54.661708631944684\n",
      "在第764步，我们获得了函数 f(rm) = 4.392946644542667 * rm + -4.715083426347154, 此时loss是: 54.65638946872132\n",
      "在第765步，我们获得了函数 f(rm) = 4.394079067469229 * rm + -4.722286902219887, 此时loss是: 54.6510728634129\n",
      "在第766步，我们获得了函数 f(rm) = 4.395211218079488 * rm + -4.72948864585647, 此时loss是: 54.64575881478925\n",
      "在第767步，我们获得了函数 f(rm) = 4.396343096438926 * rm + -4.736688657673461, 此时loss是: 54.64044732162089\n",
      "在第768步，我们获得了函数 f(rm) = 4.397474702613013 * rm + -4.743886938087312, 此时loss是: 54.63513838267896\n",
      "在第769步，我们获得了函数 f(rm) = 4.398606036667202 * rm + -4.751083487514378, 此时loss是: 54.629831996735206\n",
      "在第770步，我们获得了函数 f(rm) = 4.39973709866693 * rm + -4.758278306370913, 此时loss是: 54.624528162561774\n",
      "在第771步，我们获得了函数 f(rm) = 4.400867888677619 * rm + -4.765471395073072, 此时loss是: 54.61922687893177\n",
      "在第772步，我们获得了函数 f(rm) = 4.401998406764674 * rm + -4.772662754036909, 此时loss是: 54.61392814461853\n",
      "在第773步，我们获得了函数 f(rm) = 4.4031286529934865 * rm + -4.779852383678378, 此时loss是: 54.608631958396074\n",
      "在第774步，我们获得了函数 f(rm) = 4.40425862742943 * rm + -4.787040284413332, 此时loss是: 54.60333831903918\n",
      "在第775步，我们获得了函数 f(rm) = 4.405388330137862 * rm + -4.794226456657527, 此时loss是: 54.59804722532311\n",
      "在第776步，我们获得了函数 f(rm) = 4.406517761184127 * rm + -4.801410900826616, 此时loss是: 54.59275867602356\n",
      "在第777步，我们获得了函数 f(rm) = 4.407646920633552 * rm + -4.808593617336153, 此时loss是: 54.58747266991706\n",
      "在第778步，我们获得了函数 f(rm) = 4.408775808551448 * rm + -4.815774606601592, 此时loss是: 54.58218920578059\n",
      "在第779步，我们获得了函数 f(rm) = 4.409904425003112 * rm + -4.8229538690382885, 此时loss是: 54.57690828239176\n",
      "在第780步，我们获得了函数 f(rm) = 4.411032770053822 * rm + -4.830131405061496, 此时loss是: 54.57162989852872\n",
      "在第781步，我们获得了函数 f(rm) = 4.412160843768844 * rm + -4.837307215086369, 此时loss是: 54.566354052970304\n",
      "在第782步，我们获得了函数 f(rm) = 4.413288646213426 * rm + -4.8444812995279625, 此时loss是: 54.5610807444959\n",
      "在第783步，我们获得了函数 f(rm) = 4.414416177452802 * rm + -4.851653658801231, 此时loss是: 54.555809971885346\n",
      "在第784步，我们获得了函数 f(rm) = 4.415543437552189 * rm + -4.858824293321031, 此时loss是: 54.550541733919225\n",
      "在第785步，我们获得了函数 f(rm) = 4.416670426576787 * rm + -4.865993203502116, 此时loss是: 54.54527602937872\n",
      "在第786步，我们获得了函数 f(rm) = 4.417797144591784 * rm + -4.873160389759143, 此时loss是: 54.54001285704546\n",
      "在第787步，我们获得了函数 f(rm) = 4.41892359166235 * rm + -4.880325852506667, 此时loss是: 54.53475221570177\n",
      "在第788步，我们获得了函数 f(rm) = 4.420049767853638 * rm + -4.887489592159145, 此时loss是: 54.52949410413058\n",
      "在第789步，我们获得了函数 f(rm) = 4.421175673230788 * rm + -4.894651609130933, 此时loss是: 54.52423852111528\n",
      "在第790步，我们获得了函数 f(rm) = 4.422301307858924 * rm + -4.901811903836288, 此时loss是: 54.51898546543999\n",
      "在第791步，我们获得了函数 f(rm) = 4.423426671803153 * rm + -4.908970476689367, 此时loss是: 54.5137349358893\n",
      "在第792步，我们获得了函数 f(rm) = 4.424551765128568 * rm + -4.916127328104229, 此时loss是: 54.50848693124839\n",
      "在第793步，我们获得了函数 f(rm) = 4.425676587900242 * rm + -4.923282458494831, 此时loss是: 54.503241450303136\n",
      "在第794步，我们获得了函数 f(rm) = 4.42680114018324 * rm + -4.9304358682750316, 此时loss是: 54.49799849183997\n",
      "在第795步，我们获得了函数 f(rm) = 4.4279254220426045 * rm + -4.93758755785859, 此时loss是: 54.49275805464578\n",
      "在第796步，我们获得了函数 f(rm) = 4.429049433543366 * rm + -4.944737527659167, 此时loss是: 54.487520137508035\n",
      "在第797步，我们获得了函数 f(rm) = 4.430173174750537 * rm + -4.951885778090321, 此时loss是: 54.48228473921505\n",
      "在第798步，我们获得了函数 f(rm) = 4.431296645729115 * rm + -4.959032309565513, 此时loss是: 54.47705185855545\n",
      "在第799步，我们获得了函数 f(rm) = 4.432419846544085 * rm + -4.966177122498105, 此时loss是: 54.47182149431863\n",
      "在第800步，我们获得了函数 f(rm) = 4.433542777260413 * rm + -4.973320217301358, 此时loss是: 54.466593645294424\n",
      "在第801步，我们获得了函数 f(rm) = 4.434665437943049 * rm + -4.980461594388435, 此时loss是: 54.46136831027319\n",
      "在第802步，我们获得了函数 f(rm) = 4.435787828656929 * rm + -4.987601254172399, 此时loss是: 54.45614548804611\n",
      "在第803步，我们获得了函数 f(rm) = 4.436909949466974 * rm + -4.994739197066214, 此时loss是: 54.45092517740474\n",
      "在第804步，我们获得了函数 f(rm) = 4.438031800438089 * rm + -5.001875423482744, 此时loss是: 54.44570737714138\n",
      "在第805步，我们获得了函数 f(rm) = 4.43915338163516 * rm + -5.009009933834754, 此时loss是: 54.44049208604875\n",
      "在第806步，我们获得了函数 f(rm) = 4.4402746931230626 * rm + -5.016142728534911, 此时loss是: 54.43527930292023\n",
      "在第807步，我们获得了函数 f(rm) = 4.441395734966653 * rm + -5.02327380799578, 此时loss是: 54.43006902654984\n",
      "在第808步，我们获得了函数 f(rm) = 4.442516507230774 * rm + -5.03040317262983, 此时loss是: 54.424861255732\n",
      "在第809步，我们获得了函数 f(rm) = 4.443637009980252 * rm + -5.037530822849429, 此时loss是: 54.41965598926193\n",
      "在第810步，我们获得了函数 f(rm) = 4.444757243279898 * rm + -5.044656759066846, 此时loss是: 54.414453225935276\n",
      "在第811步，我们获得了函数 f(rm) = 4.445877207194505 * rm + -5.05178098169425, 此时loss是: 54.409252964548244\n",
      "在第812步，我们获得了函数 f(rm) = 4.4469969017888555 * rm + -5.058903491143713, 此时loss是: 54.40405520389783\n",
      "在第813步，我们获得了函数 f(rm) = 4.448116327127712 * rm + -5.066024287827207, 此时loss是: 54.39885994278133\n",
      "在第814步，我们获得了函数 f(rm) = 4.4492354832758245 * rm + -5.073143372156603, 此时loss是: 54.393667179996875\n",
      "在第815步，我们获得了函数 f(rm) = 4.450354370297924 * rm + -5.0802607445436765, 此时loss是: 54.38847691434291\n",
      "在第816步，我们获得了函数 f(rm) = 4.451472988258728 * rm + -5.087376405400102, 此时loss是: 54.383289144618686\n",
      "在第817步，我们获得了函数 f(rm) = 4.452591337222939 * rm + -5.094490355137454, 此时loss是: 54.37810386962392\n",
      "在第818步，我们获得了函数 f(rm) = 4.453709417255244 * rm + -5.10160259416721, 此时loss是: 54.372921088159\n",
      "在第819步，我们获得了函数 f(rm) = 4.454827228420313 * rm + -5.108713122900748, 此时loss是: 54.36774079902462\n",
      "在第820步，我们获得了函数 f(rm) = 4.4559447707828 * rm + -5.115821941749346, 此时loss是: 54.36256300102248\n",
      "在第821步，我们获得了函数 f(rm) = 4.457062044407345 * rm + -5.122929051124184, 此时loss是: 54.35738769295456\n",
      "在第822步，我们获得了函数 f(rm) = 4.458179049358574 * rm + -5.130034451436344, 此时loss是: 54.35221487362345\n",
      "在第823步，我们获得了函数 f(rm) = 4.459295785701093 * rm + -5.137138143096807, 此时loss是: 54.34704454183233\n",
      "在第824步，我们获得了函数 f(rm) = 4.460412253499496 * rm + -5.144240126516456, 此时loss是: 54.341876696385015\n",
      "在第825步，我们获得了函数 f(rm) = 4.46152845281836 * rm + -5.151340402106077, 此时loss是: 54.33671133608583\n",
      "在第826步，我们获得了函数 f(rm) = 4.462644383722248 * rm + -5.158438970276355, 此时loss是: 54.33154845973973\n",
      "在第827步，我们获得了函数 f(rm) = 4.463760046275706 * rm + -5.165535831437877, 此时loss是: 54.326388066152184\n",
      "在第828步，我们获得了函数 f(rm) = 4.464875440543263 * rm + -5.172630986001131, 此时loss是: 54.32123015412932\n",
      "在第829步，我们获得了函数 f(rm) = 4.465990566589436 * rm + -5.179724434376507, 此时loss是: 54.316074722477715\n",
      "在第830步，我们获得了函数 f(rm) = 4.467105424478725 * rm + -5.186816176974296, 此时loss是: 54.310921770004605\n",
      "在第831步，我们获得了函数 f(rm) = 4.468220014275614 * rm + -5.19390621420469, 此时loss是: 54.30577129551779\n",
      "在第832步，我们获得了函数 f(rm) = 4.469334336044572 * rm + -5.200994546477782, 此时loss是: 54.30062329782575\n",
      "在第833步，我们获得了函数 f(rm) = 4.47044838985005 * rm + -5.208081174203568, 此时loss是: 54.295477775737304\n",
      "在第834步，我们获得了函数 f(rm) = 4.471562175756489 * rm + -5.215166097791943, 此时loss是: 54.29033472806198\n",
      "在第835步，我们获得了函数 f(rm) = 4.472675693828309 * rm + -5.2222493176527065, 此时loss是: 54.28519415360982\n",
      "在第836步，我们获得了函数 f(rm) = 4.473788944129919 * rm + -5.229330834195556, 此时loss是: 54.280056051191615\n",
      "在第837步，我们获得了函数 f(rm) = 4.474901926725709 * rm + -5.236410647830094, 此时loss是: 54.27492041961853\n",
      "在第838步，我们获得了函数 f(rm) = 4.476014641680054 * rm + -5.243488758965821, 此时loss是: 54.26978725770232\n",
      "在第839步，我们获得了函数 f(rm) = 4.4771270890573165 * rm + -5.250565168012142, 此时loss是: 54.264656564255446\n",
      "在第840步，我们获得了函数 f(rm) = 4.478239268921839 * rm + -5.257639875378361, 此时loss是: 54.259528338090725\n",
      "在第841步，我们获得了函数 f(rm) = 4.479351181337953 * rm + -5.264712881473686, 此时loss是: 54.2544025780219\n",
      "在第842步，我们获得了函数 f(rm) = 4.48046282636997 * rm + -5.271784186707225, 此时loss是: 54.24927928286288\n",
      "在第843步，我们获得了函数 f(rm) = 4.48157420408219 * rm + -5.278853791487988, 此时loss是: 54.244158451428305\n",
      "在第844步，我们获得了函数 f(rm) = 4.482685314538897 * rm + -5.285921696224887, 此时loss是: 54.23904008253354\n",
      "在第845步，我们获得了函数 f(rm) = 4.483796157804357 * rm + -5.292987901326735, 此时loss是: 54.23392417499424\n",
      "在第846步，我们获得了函数 f(rm) = 4.484906733942823 * rm + -5.300052407202248, 此时loss是: 54.228810727626886\n",
      "在第847步，我们获得了函数 f(rm) = 4.4860170430185295 * rm + -5.307115214260042, 此时loss是: 54.223699739248296\n",
      "在第848步，我们获得了函数 f(rm) = 4.4871270850957 * rm + -5.314176322908636, 此时loss是: 54.21859120867607\n",
      "在第849步，我们获得了函数 f(rm) = 4.4882368602385405 * rm + -5.321235733556449, 此时loss是: 54.21348513472829\n",
      "在第850步，我们获得了函数 f(rm) = 4.48934636851124 * rm + -5.328293446611805, 此时loss是: 54.20838151622355\n",
      "在第851步，我们获得了函数 f(rm) = 4.490455609977974 * rm + -5.3353494624829265, 此时loss是: 54.203280351981014\n",
      "在第852步，我们获得了函数 f(rm) = 4.491564584702901 * rm + -5.34240378157794, 此时loss是: 54.19818164082062\n",
      "在第853步，我们获得了函数 f(rm) = 4.492673292750165 * rm + -5.349456404304873, 此时loss是: 54.19308538156251\n",
      "在第854步，我们获得了函数 f(rm) = 4.493781734183896 * rm + -5.356507331071655, 此时loss是: 54.18799157302777\n",
      "在第855步，我们获得了函数 f(rm) = 4.494889909068206 * rm + -5.363556562286117, 此时loss是: 54.18290021403774\n",
      "在第856步，我们获得了函数 f(rm) = 4.495997817467194 * rm + -5.370604098355993, 此时loss是: 54.17781130341454\n",
      "在第857步，我们获得了函数 f(rm) = 4.497105459444941 * rm + -5.377649939688917, 此时loss是: 54.172724839980816\n",
      "在第858步，我们获得了函数 f(rm) = 4.498212835065515 * rm + -5.384694086692427, 此时loss是: 54.167640822559754\n",
      "在第859步，我们获得了函数 f(rm) = 4.499319944392966 * rm + -5.391736539773962, 此时loss是: 54.162559249975025\n",
      "在第860步，我们获得了函数 f(rm) = 4.500426787491332 * rm + -5.398777299340864, 此时loss是: 54.15748012105093\n",
      "在第861步，我们获得了函数 f(rm) = 4.501533364424632 * rm + -5.4058163658003755, 此时loss是: 54.15240343461239\n",
      "在第862步，我们获得了函数 f(rm) = 4.502639675256872 * rm + -5.412853739559642, 此时loss是: 54.14732918948485\n",
      "在第863步，我们获得了函数 f(rm) = 4.503745720052042 * rm + -5.419889421025712, 此时loss是: 54.142257384494265\n",
      "在第864步，我们获得了函数 f(rm) = 4.504851498874117 * rm + -5.426923410605533, 此时loss是: 54.13718801846728\n",
      "在第865步，我们获得了函数 f(rm) = 4.505957011787055 * rm + -5.433955708705959, 此时loss是: 54.132121090230996\n",
      "在第866步，我们获得了函数 f(rm) = 4.507062258854801 * rm + -5.440986315733742, 此时loss是: 54.12705659861312\n",
      "在第867步，我们获得了函数 f(rm) = 4.508167240141282 * rm + -5.448015232095539, 此时loss是: 54.12199454244191\n",
      "在第868步，我们获得了函数 f(rm) = 4.509271955710413 * rm + -5.455042458197908, 此时loss是: 54.11693492054617\n",
      "在第869步，我们获得了函数 f(rm) = 4.51037640562609 * rm + -5.46206799444731, 此时loss是: 54.1118777317553\n",
      "在第870步，我们获得了函数 f(rm) = 4.511480589952195 * rm + -5.469091841250107, 此时loss是: 54.106822974899316\n",
      "在第871步，我们获得了函数 f(rm) = 4.512584508752597 * rm + -5.476113999012564, 此时loss是: 54.10177064880861\n",
      "在第872步，我们获得了函数 f(rm) = 4.513688162091146 * rm + -5.483134468140849, 此时loss是: 54.09672075231434\n",
      "在第873步，我们获得了函数 f(rm) = 4.514791550031678 * rm + -5.4901532490410325, 此时loss是: 54.09167328424821\n",
      "在第874步，我们获得了函数 f(rm) = 4.515894672638014 * rm + -5.497170342119085, 此时loss是: 54.08662824344228\n",
      "在第875步，我们获得了函数 f(rm) = 4.51699752997396 * rm + -5.504185747780881, 此时loss是: 54.08158562872933\n",
      "在第876步，我们获得了函数 f(rm) = 4.518100122103307 * rm + -5.511199466432198, 此时loss是: 54.07654543894279\n",
      "在第877步，我们获得了函数 f(rm) = 4.519202449089828 * rm + -5.518211498478715, 此时loss是: 54.07150767291648\n",
      "在第878步，我们获得了函数 f(rm) = 4.520304510997284 * rm + -5.525221844326014, 此时loss是: 54.0664723294848\n",
      "在第879步，我们获得了函数 f(rm) = 4.521406307889419 * rm + -5.532230504379578, 此时loss是: 54.06143940748292\n",
      "在第880步，我们获得了函数 f(rm) = 4.52250783982996 * rm + -5.539237479044795, 此时loss是: 54.056408905746224\n",
      "在第881步，我们获得了函数 f(rm) = 4.523609106882622 * rm + -5.5462427687269535, 此时loss是: 54.05138082311085\n",
      "在第882步，我们获得了函数 f(rm) = 4.524710109111104 * rm + -5.553246373831245, 此时loss是: 54.04635515841362\n",
      "在第883步，我们获得了函数 f(rm) = 4.525810846579088 * rm + -5.560248294762764, 此时loss是: 54.04133191049168\n",
      "在第884步，我们获得了函数 f(rm) = 4.526911319350241 * rm + -5.5672485319265075, 此时loss是: 54.03631107818285\n",
      "在第885步，我们获得了函数 f(rm) = 4.528011527488215 * rm + -5.574247085727374, 此时loss是: 54.03129266032556\n",
      "在第886步，我们获得了函数 f(rm) = 4.529111471056648 * rm + -5.581243956570167, 此时loss是: 54.0262766557586\n",
      "在第887步，我们获得了函数 f(rm) = 4.530211150119162 * rm + -5.58823914485959, 此时loss是: 54.02126306332149\n",
      "在第888步，我们获得了函数 f(rm) = 4.531310564739362 * rm + -5.595232651000251, 此时loss是: 54.0162518818544\n",
      "在第889步，我们获得了函数 f(rm) = 4.53240971498084 * rm + -5.602224475396661, 此时loss是: 54.0112431101978\n",
      "在第890步，我们获得了函数 f(rm) = 4.5335086009071714 * rm + -5.609214618453231, 此时loss是: 54.00623674719287\n",
      "在第891步，我们获得了函数 f(rm) = 4.534607222581917 * rm + -5.616203080574278, 此时loss是: 54.001232791681325\n",
      "在第892步，我们获得了函数 f(rm) = 4.535705580068622 * rm + -5.62318986216402, 此时loss是: 53.99623124250543\n",
      "在第893步，我们获得了函数 f(rm) = 4.536803673430815 * rm + -5.630174963626579, 此时loss是: 53.991232098508014\n",
      "在第894步，我们获得了函数 f(rm) = 4.537901502732012 * rm + -5.637158385365977, 此时loss是: 53.986235358532426\n",
      "在第895步，我们获得了函数 f(rm) = 4.538999068035712 * rm + -5.644140127786142, 此时loss是: 53.981241021422676\n",
      "在第896步，我们获得了函数 f(rm) = 4.540096369405399 * rm + -5.651120191290904, 此时loss是: 53.97624908602322\n",
      "在第897步，我们获得了函数 f(rm) = 4.541193406904542 * rm + -5.658098576283995, 此时loss是: 53.971259551179116\n",
      "在第898步，我们获得了函数 f(rm) = 4.542290180596593 * rm + -5.665075283169051, 此时loss是: 53.96627241573591\n",
      "在第899步，我们获得了函数 f(rm) = 4.543386690544993 * rm + -5.67205031234961, 此时loss是: 53.96128767853984\n",
      "在第900步，我们获得了函数 f(rm) = 4.544482936813163 * rm + -5.679023664229113, 此时loss是: 53.956305338437595\n",
      "在第901步，我们获得了函数 f(rm) = 4.545578919464512 * rm + -5.685995339210906, 此时loss是: 53.95132539427644\n",
      "在第902步，我们获得了函数 f(rm) = 4.546674638562433 * rm + -5.692965337698235, 此时loss是: 53.94634784490418\n",
      "在第903步，我们获得了函数 f(rm) = 4.547770094170302 * rm + -5.69993366009425, 此时loss是: 53.941372689169256\n",
      "在第904步，我们获得了函数 f(rm) = 4.54886528635148 * rm + -5.706900306802006, 此时loss是: 53.93639992592052\n",
      "在第905步，我们获得了函数 f(rm) = 4.549960215169316 * rm + -5.713865278224459, 此时loss是: 53.93142955400749\n",
      "在第906步，我们获得了函数 f(rm) = 4.55105488068714 * rm + -5.720828574764468, 此时loss是: 53.92646157228027\n",
      "在第907步，我们获得了函数 f(rm) = 4.552149282968269 * rm + -5.727790196824796, 此时loss是: 53.921495979589295\n",
      "在第908步，我们获得了函数 f(rm) = 4.553243422076005 * rm + -5.7347501448081095, 此时loss是: 53.91653277478584\n",
      "在第909步，我们获得了函数 f(rm) = 4.554337298073634 * rm + -5.741708419116977, 此时loss是: 53.911571956721616\n",
      "在第910步，我们获得了函数 f(rm) = 4.555430911024424 * rm + -5.7486650201538705, 此时loss是: 53.90661352424878\n",
      "在第911步，我们获得了函数 f(rm) = 4.556524260991633 * rm + -5.755619948321167, 此时loss是: 53.9016574762202\n",
      "在第912步，我们获得了函数 f(rm) = 4.557617348038501 * rm + -5.762573204021144, 此时loss是: 53.89670381148915\n",
      "在第913步，我们获得了函数 f(rm) = 4.558710172228252 * rm + -5.769524787655983, 此时loss是: 53.89175252890964\n",
      "在第914步，我们获得了函数 f(rm) = 4.559802733624096 * rm + -5.77647469962777, 此时loss是: 53.886803627336064\n",
      "在第915步，我们获得了函数 f(rm) = 4.5608950322892285 * rm + -5.783422940338494, 此时loss是: 53.88185710562336\n",
      "在第916步，我们获得了函数 f(rm) = 4.561987068286829 * rm + -5.790369510190047, 此时loss是: 53.87691296262725\n",
      "在第917步，我们获得了函数 f(rm) = 4.563078841680061 * rm + -5.797314409584223, 此时loss是: 53.87197119720372\n",
      "在第918步，我们获得了函数 f(rm) = 4.564170352532073 * rm + -5.804257638922722, 此时loss是: 53.86703180820949\n",
      "在第919步，我们获得了函数 f(rm) = 4.565261600906 * rm + -5.811199198607145, 此时loss是: 53.86209479450167\n",
      "在第920步，我们获得了函数 f(rm) = 4.566352586864961 * rm + -5.818139089038999, 此时loss是: 53.857160154938086\n",
      "在第921步，我们获得了函数 f(rm) = 4.5674433104720595 * rm + -5.825077310619691, 此时loss是: 53.85222788837708\n",
      "在第922步，我们获得了函数 f(rm) = 4.568533771790382 * rm + -5.832013863750535, 此时loss是: 53.84729799367746\n",
      "在第923步，我们获得了函数 f(rm) = 4.569623970883004 * rm + -5.838948748832746, 此时loss是: 53.84237046969858\n",
      "在第924步，我们获得了函数 f(rm) = 4.570713907812982 * rm + -5.845881966267444, 此时loss是: 53.8374453153005\n",
      "在第925步，我们获得了函数 f(rm) = 4.571803582643359 * rm + -5.852813516455652, 此时loss是: 53.83252252934372\n",
      "在第926步，我们获得了函数 f(rm) = 4.572892995437163 * rm + -5.859743399798296, 此时loss是: 53.827602110689156\n",
      "在第927步，我们获得了函数 f(rm) = 4.573982146257407 * rm + -5.866671616696206, 此时loss是: 53.82268405819843\n",
      "在第928步，我们获得了函数 f(rm) = 4.575071035167088 * rm + -5.873598167550116, 此时loss是: 53.817768370733916\n",
      "在第929步，我们获得了函数 f(rm) = 4.576159662229188 * rm + -5.8805230527606644, 此时loss是: 53.81285504715792\n",
      "在第930步，我们获得了函数 f(rm) = 4.577248027506673 * rm + -5.887446272728391, 此时loss是: 53.807944086334\n",
      "在第931步，我们获得了函数 f(rm) = 4.578336131062498 * rm + -5.89436782785374, 此时loss是: 53.80303548712583\n",
      "在第932步，我们获得了函数 f(rm) = 4.579423972959597 * rm + -5.901287718537062, 此时loss是: 53.79812924839769\n",
      "在第933步，我们获得了函数 f(rm) = 4.580511553260893 * rm + -5.908205945178607, 此时loss是: 53.79322536901452\n",
      "在第934步，我们获得了函数 f(rm) = 4.581598872029292 * rm + -5.9151225081785315, 此时loss是: 53.78832384784175\n",
      "在第935步，我们获得了函数 f(rm) = 4.582685929327685 * rm + -5.922037407936895, 此时loss是: 53.78342468374538\n",
      "在第936步，我们获得了函数 f(rm) = 4.5837727252189495 * rm + -5.928950644853662, 此时loss是: 53.778527875591735\n",
      "在第937步，我们获得了函数 f(rm) = 4.584859259765945 * rm + -5.935862219328699, 此时loss是: 53.77363342224795\n",
      "在第938步，我们获得了函数 f(rm) = 4.58594553303152 * rm + -5.942772131761777, 此时loss是: 53.76874132258187\n",
      "在第939步，我们获得了函数 f(rm) = 4.587031545078503 * rm + -5.949680382552572, 此时loss是: 53.763851575461366\n",
      "在第940步，我们获得了函数 f(rm) = 4.588117295969711 * rm + -5.956586972100661, 此时loss是: 53.758964179755196\n",
      "在第941步，我们获得了函数 f(rm) = 4.589202785767945 * rm + -5.963491900805528, 此时loss是: 53.75407913433271\n",
      "在第942步，我们获得了函数 f(rm) = 4.5902880145359894 * rm + -5.970395169066561, 此时loss是: 53.74919643806353\n",
      "在第943步，我们获得了函数 f(rm) = 4.591372982336616 * rm + -5.977296777283048, 此时loss是: 53.744316089818064\n",
      "在第944步，我们获得了函数 f(rm) = 4.592457689232579 * rm + -5.984196725854185, 此时loss是: 53.739438088467146\n",
      "在第945步，我们获得了函数 f(rm) = 4.59354213528662 * rm + -5.991095015179071, 此时loss是: 53.734562432882264\n",
      "在第946步，我们获得了函数 f(rm) = 4.5946263205614635 * rm + -5.997991645656708, 此时loss是: 53.72968912193522\n",
      "在第947步，我们获得了函数 f(rm) = 4.59571024511982 * rm + -6.004886617686004, 此时loss是: 53.72481815449859\n",
      "在第948步，我们获得了函数 f(rm) = 4.596793909024385 * rm + -6.011779931665768, 此时loss是: 53.71994952944552\n",
      "在第949步，我们获得了函数 f(rm) = 4.597877312337837 * rm + -6.018671587994716, 此时loss是: 53.7150832456494\n",
      "在第950步，我们获得了函数 f(rm) = 4.5989604551228425 * rm + -6.025561587071468, 此时loss是: 53.710219301984466\n",
      "在第951步，我们获得了函数 f(rm) = 4.60004333744205 * rm + -6.032449929294545, 此时loss是: 53.70535769732537\n",
      "在第952步，我们获得了函数 f(rm) = 4.601125959358096 * rm + -6.039336615062376, 此时loss是: 53.70049843054728\n",
      "在第953步，我们获得了函数 f(rm) = 4.602208320933598 * rm + -6.046221644773292, 此时loss是: 53.69564150052598\n",
      "在第954步，我们获得了函数 f(rm) = 4.603290422231162 * rm + -6.053105018825528, 此时loss是: 53.69078690613768\n",
      "在第955步，我们获得了函数 f(rm) = 4.60437226331338 * rm + -6.059986737617225, 此时loss是: 53.68593464625923\n",
      "在第956步，我们获得了函数 f(rm) = 4.605453844242822 * rm + -6.0668668015464275, 此时loss是: 53.68108471976807\n",
      "在第957步，我们获得了函数 f(rm) = 4.60653516508205 * rm + -6.073745211011083, 此时loss是: 53.676237125542094\n",
      "在第958步，我们获得了函数 f(rm) = 4.607616225893608 * rm + -6.080621966409045, 此时loss是: 53.671391862459664\n",
      "在第959步，我们获得了函数 f(rm) = 4.608697026740026 * rm + -6.08749706813807, 此时loss是: 53.66654892939982\n",
      "在第960步，我们获得了函数 f(rm) = 4.6097775676838175 * rm + -6.094370516595821, 此时loss是: 53.66170832524206\n",
      "在第961步，我们获得了函数 f(rm) = 4.610857848787482 * rm + -6.1012423121798625, 此时loss是: 53.65687004886642\n",
      "在第962步，我们获得了函数 f(rm) = 4.611937870113506 * rm + -6.108112455287665, 此时loss是: 53.65203409915364\n",
      "在第963步，我们获得了函数 f(rm) = 4.613017631724356 * rm + -6.114980946316603, 此时loss是: 53.64720047498471\n",
      "在第964步，我们获得了函数 f(rm) = 4.6140971336824865 * rm + -6.121847785663957, 此时loss是: 53.64236917524136\n",
      "在第965步，我们获得了函数 f(rm) = 4.615176376050338 * rm + -6.128712973726909, 此时loss是: 53.637540198805816\n",
      "在第966步，我们获得了函数 f(rm) = 4.616255358890335 * rm + -6.135576510902548, 此时loss是: 53.63271354456078\n",
      "在第967步，我们获得了函数 f(rm) = 4.617334082264886 * rm + -6.142438397587866, 此时loss是: 53.62788921138957\n",
      "在第968步，我们获得了函数 f(rm) = 4.618412546236386 * rm + -6.14929863417976, 此时loss是: 53.62306719817603\n",
      "在第969步，我们获得了函数 f(rm) = 4.619490750867213 * rm + -6.156157221075033, 此时loss是: 53.61824750380453\n",
      "在第970步，我们获得了函数 f(rm) = 4.620568696219731 * rm + -6.16301415867039, 此时loss是: 53.61343012715999\n",
      "在第971步，我们获得了函数 f(rm) = 4.621646382356291 * rm + -6.1698694473624425, 此时loss是: 53.60861506712781\n",
      "在第972步，我们获得了函数 f(rm) = 4.6227238093392256 * rm + -6.176723087547706, 此时loss是: 53.60380232259383\n",
      "在第973步，我们获得了函数 f(rm) = 4.6238009772308555 * rm + -6.1835750796226, 此时loss是: 53.59899189244484\n",
      "在第974步，我们获得了函数 f(rm) = 4.6248778860934845 * rm + -6.19042542398345, 此时loss是: 53.59418377556761\n",
      "在第975步，我们获得了函数 f(rm) = 4.6259545359894005 * rm + -6.197274121026486, 此时loss是: 53.58937797084998\n",
      "在第976步，我们获得了函数 f(rm) = 4.62703092698088 * rm + -6.2041211711478415, 此时loss是: 53.5845744771798\n",
      "在第977步，我们获得了函数 f(rm) = 4.628107059130181 * rm + -6.210966574743556, 此时loss是: 53.57977329344589\n",
      "在第978步，我们获得了函数 f(rm) = 4.629182932499548 * rm + -6.217810332209572, 此时loss是: 53.57497441853739\n",
      "在第979步，我们获得了函数 f(rm) = 4.630258547151211 * rm + -6.224652443941739, 此时loss是: 53.57017785134399\n",
      "在第980步，我们获得了函数 f(rm) = 4.631333903147383 * rm + -6.2314929103358105, 此时loss是: 53.56538359075594\n",
      "在第981步，我们获得了函数 f(rm) = 4.632409000550266 * rm + -6.2383317317874445, 此时loss是: 53.560591635664096\n",
      "在第982步，我们获得了函数 f(rm) = 4.633483839422042 * rm + -6.245168908692204, 此时loss是: 53.55580198495962\n",
      "在第983步，我们获得了函数 f(rm) = 4.634558419824882 * rm + -6.252004441445557, 此时loss是: 53.55101463753458\n",
      "在第984步，我们获得了函数 f(rm) = 4.63563274182094 * rm + -6.258838330442876, 此时loss是: 53.546229592281186\n",
      "在第985步，我们获得了函数 f(rm) = 4.636706805472356 * rm + -6.2656705760794384, 此时loss是: 53.54144684809245\n",
      "在第986步，我们获得了函数 f(rm) = 4.637780610841253 * rm + -6.272501178750428, 此时loss是: 53.536666403861815\n",
      "在第987步，我们获得了函数 f(rm) = 4.638854157989744 * rm + -6.2793301388509315, 此时loss是: 53.53188825848316\n",
      "在第988步，我们获得了函数 f(rm) = 4.639927446979922 * rm + -6.286157456775942, 此时loss是: 53.527112410851075\n",
      "在第989步，我们获得了函数 f(rm) = 4.641000477873867 * rm + -6.292983132920357, 此时loss是: 53.52233885986064\n",
      "在第990步，我们获得了函数 f(rm) = 4.6420732507336435 * rm + -6.2998071676789795, 此时loss是: 53.51756760440736\n",
      "在第991步，我们获得了函数 f(rm) = 4.643145765621303 * rm + -6.306629561446517, 此时loss是: 53.51279864338739\n",
      "在第992步，我们获得了函数 f(rm) = 4.644218022598879 * rm + -6.313450314617582, 此时loss是: 53.50803197569738\n",
      "在第993步，我们获得了函数 f(rm) = 4.645290021728393 * rm + -6.320269427586693, 此时loss是: 53.5032676002344\n",
      "在第994步，我们获得了函数 f(rm) = 4.646361763071849 * rm + -6.327086900748273, 此时loss是: 53.49850551589623\n",
      "在第995步，我们获得了函数 f(rm) = 4.6474332466912385 * rm + -6.333902734496649, 此时loss是: 53.49374572158111\n",
      "在第996步，我们获得了函数 f(rm) = 4.648504472648537 * rm + -6.340716929226057, 此时loss是: 53.48898821618769\n",
      "在第997步，我们获得了函数 f(rm) = 4.649575441005704 * rm + -6.347529485330633, 此时loss是: 53.48423299861542\n",
      "在第998步，我们获得了函数 f(rm) = 4.650646151824687 * rm + -6.354340403204422, 此时loss是: 53.47948006776409\n",
      "在第999步，我们获得了函数 f(rm) = 4.651716605167415 * rm + -6.361149683241374, 此时loss是: 53.47472942253386\n"
     ]
    }
   ],
   "source": [
    "import random\n",
    "def partial_k(k, b, x, y):\n",
    "    return 2 * np.mean((k * x + b - y) * x)\n",
    "\n",
    "def partial_b(k, b, x, y):\n",
    "    return 2 * np.mean(k * x + b - y)\n",
    "\n",
    "k, b = random.random(), random.random()\n",
    "min_loss = float('inf')\n",
    "best_k, bes_b = None, None\n",
    "learning_rate = 0.01\n",
    "\n",
    "for step in range(1000):\n",
    "    k, b = k + (-1 * partial_k(k, b, x, y) * learning_rate), b + (-1 * partial_b(k, b, x, y) * learning_rate)\n",
    "    y_hats = k * x + b\n",
    "    current_loss = loss(y_hats, y)\n",
    "    \n",
    "    if current_loss < min_loss:\n",
    "        min_loss = current_loss\n",
    "        best_k, best_b = k, b\n",
    "        print('在第{}步，我们获得了函数 f(rm) = {} * rm + {}, 此时loss是: {}'.format(step, k, b, current_loss))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "best_k, best_b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.scatter(x, y)\n",
    "plt.scatter(x, [best_k * rm + best_b for rm in x])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Supervised Learning"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 我们把房价的预测 变成更加负责，精细的模型，该怎么做？"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ f(x) = k * x + b $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ f(x) = k2 * \\sigma(k_1 * x + b_1) + b2 $$\n",
    "\n",
    "$$ \\sigma(x) = \\frac{1}{1 + e^(-x)} $$ "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "def sigmoid(x):\n",
    "    return 1 / (1 + np.exp(-x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "[<matplotlib.lines.Line2D at 0x22a8110b880>]"
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sub_x = np.linspace(-10, 10)\n",
    "plt.plot(sub_x, sigmoid(sub_x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "def random_linear(x):\n",
    "    k, b = random.random(), random.random()\n",
    "    return k * x + b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "def complex_function(x):\n",
    "    return (random_linear(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for _ in range(10):\n",
    "    index = random.randrange(0, len(sub_x))\n",
    "    sub_x_1, sub_x_2 = sub_x[:index], sub_x[index:]\n",
    "    new_y = np.concatenate((complex_function(sub_x_1), complex_function(sub_x_2)))\n",
    "    plt.plot(sub_x, new_y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 我们可以通过简单的、基本的模块，经过反复的叠加，来实现更加复杂的函数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 面向越来越越复杂的函数？计算机如何求导？"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. 什么是机器学习？\n",
    "## 2. KNN这种方法的缺陷，提出线性拟合的背景是什么\n",
    "## 3. 怎么样通过监督的方法，来获得更快的函数权值更新\n",
    "## 4. 非线性函数和线性函数的结合，可以拟合出非常复杂的函数\n",
    "## 5. 深度学习我们可以通过基本的函数模块，来拟合更加复杂的函数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Assigment:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ L2-Loss(y, \\hat{y}) = \\frac{1}{n}\\sum{(\\hat{y} - y)}^2 $$\n",
    "$$ L1-Loss(y, \\hat{y}) = \\frac{1}{n}\\sum{|(\\hat{y} - y)|} $$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 将课堂代码中的L2-Loss 变成L1Loss 并且实现梯度下降"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从0开始实现L1Loss梯度下降"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1 导入包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2 加载数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "dict_keys(['data', 'target', 'feature_names', 'DESCR', 'filename'])"
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.datasets import load_boston\n",
    "boston = load_boston()\n",
    "boston.keys()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = boston.data\n",
    "y = boston.target"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "      CRIM    ZN  INDUS  CHAS    NOX     RM   AGE     DIS  RAD    TAX  \\\n0  0.00632  18.0   2.31   0.0  0.538  6.575  65.2  4.0900  1.0  296.0   \n1  0.02731   0.0   7.07   0.0  0.469  6.421  78.9  4.9671  2.0  242.0   \n2  0.02729   0.0   7.07   0.0  0.469  7.185  61.1  4.9671  2.0  242.0   \n3  0.03237   0.0   2.18   0.0  0.458  6.998  45.8  6.0622  3.0  222.0   \n4  0.06905   0.0   2.18   0.0  0.458  7.147  54.2  6.0622  3.0  222.0   \n\n   PTRATIO       B  LSTAT  \n0     15.3  396.90   4.98  \n1     17.8  396.90   9.14  \n2     17.8  392.83   4.03  \n3     18.7  394.63   2.94  \n4     18.7  396.90   5.33  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>CRIM</th>\n      <th>ZN</th>\n      <th>INDUS</th>\n      <th>CHAS</th>\n      <th>NOX</th>\n      <th>RM</th>\n      <th>AGE</th>\n      <th>DIS</th>\n      <th>RAD</th>\n      <th>TAX</th>\n      <th>PTRATIO</th>\n      <th>B</th>\n      <th>LSTAT</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0.00632</td>\n      <td>18.0</td>\n      <td>2.31</td>\n      <td>0.0</td>\n      <td>0.538</td>\n      <td>6.575</td>\n      <td>65.2</td>\n      <td>4.0900</td>\n      <td>1.0</td>\n      <td>296.0</td>\n      <td>15.3</td>\n      <td>396.90</td>\n      <td>4.98</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>0.02731</td>\n      <td>0.0</td>\n      <td>7.07</td>\n      <td>0.0</td>\n      <td>0.469</td>\n      <td>6.421</td>\n      <td>78.9</td>\n      <td>4.9671</td>\n      <td>2.0</td>\n      <td>242.0</td>\n      <td>17.8</td>\n      <td>396.90</td>\n      <td>9.14</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>0.02729</td>\n      <td>0.0</td>\n      <td>7.07</td>\n      <td>0.0</td>\n      <td>0.469</td>\n      <td>7.185</td>\n      <td>61.1</td>\n      <td>4.9671</td>\n      <td>2.0</td>\n      <td>242.0</td>\n      <td>17.8</td>\n      <td>392.83</td>\n      <td>4.03</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>0.03237</td>\n      <td>0.0</td>\n      <td>2.18</td>\n      <td>0.0</td>\n      <td>0.458</td>\n      <td>6.998</td>\n      <td>45.8</td>\n      <td>6.0622</td>\n      <td>3.0</td>\n      <td>222.0</td>\n      <td>18.7</td>\n      <td>394.63</td>\n      <td>2.94</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>0.06905</td>\n      <td>0.0</td>\n      <td>2.18</td>\n      <td>0.0</td>\n      <td>0.458</td>\n      <td>7.147</td>\n      <td>54.2</td>\n      <td>6.0622</td>\n      <td>3.0</td>\n      <td>222.0</td>\n      <td>18.7</td>\n      <td>396.90</td>\n      <td>5.33</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "boston = pd.DataFrame(boston.data, columns = boston.feature_names)\n",
    "boston.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "             CRIM          ZN       INDUS        CHAS         NOX          RM  \\\ncount  506.000000  506.000000  506.000000  506.000000  506.000000  506.000000   \nmean     3.613524   11.363636   11.136779    0.069170    0.554695    6.284634   \nstd      8.601545   23.322453    6.860353    0.253994    0.115878    0.702617   \nmin      0.006320    0.000000    0.460000    0.000000    0.385000    3.561000   \n25%      0.082045    0.000000    5.190000    0.000000    0.449000    5.885500   \n50%      0.256510    0.000000    9.690000    0.000000    0.538000    6.208500   \n75%      3.677083   12.500000   18.100000    0.000000    0.624000    6.623500   \nmax     88.976200  100.000000   27.740000    1.000000    0.871000    8.780000   \n\n              AGE         DIS         RAD         TAX     PTRATIO           B  \\\ncount  506.000000  506.000000  506.000000  506.000000  506.000000  506.000000   \nmean    68.574901    3.795043    9.549407  408.237154   18.455534  356.674032   \nstd     28.148861    2.105710    8.707259  168.537116    2.164946   91.294864   \nmin      2.900000    1.129600    1.000000  187.000000   12.600000    0.320000   \n25%     45.025000    2.100175    4.000000  279.000000   17.400000  375.377500   \n50%     77.500000    3.207450    5.000000  330.000000   19.050000  391.440000   \n75%     94.075000    5.188425   24.000000  666.000000   20.200000  396.225000   \nmax    100.000000   12.126500   24.000000  711.000000   22.000000  396.900000   \n\n            LSTAT  \ncount  506.000000  \nmean    12.653063  \nstd      7.141062  \nmin      1.730000  \n25%      6.950000  \n50%     11.360000  \n75%     16.955000  \nmax     37.970000  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>CRIM</th>\n      <th>ZN</th>\n      <th>INDUS</th>\n      <th>CHAS</th>\n      <th>NOX</th>\n      <th>RM</th>\n      <th>AGE</th>\n      <th>DIS</th>\n      <th>RAD</th>\n      <th>TAX</th>\n      <th>PTRATIO</th>\n      <th>B</th>\n      <th>LSTAT</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>count</th>\n      <td>506.000000</td>\n      <td>506.000000</td>\n      <td>506.000000</td>\n      <td>506.000000</td>\n      <td>506.000000</td>\n      <td>506.000000</td>\n      <td>506.000000</td>\n      <td>506.000000</td>\n      <td>506.000000</td>\n      <td>506.000000</td>\n      <td>506.000000</td>\n      <td>506.000000</td>\n      <td>506.000000</td>\n    </tr>\n    <tr>\n      <th>mean</th>\n      <td>3.613524</td>\n      <td>11.363636</td>\n      <td>11.136779</td>\n      <td>0.069170</td>\n      <td>0.554695</td>\n      <td>6.284634</td>\n      <td>68.574901</td>\n      <td>3.795043</td>\n      <td>9.549407</td>\n      <td>408.237154</td>\n      <td>18.455534</td>\n      <td>356.674032</td>\n      <td>12.653063</td>\n    </tr>\n    <tr>\n      <th>std</th>\n      <td>8.601545</td>\n      <td>23.322453</td>\n      <td>6.860353</td>\n      <td>0.253994</td>\n      <td>0.115878</td>\n      <td>0.702617</td>\n      <td>28.148861</td>\n      <td>2.105710</td>\n      <td>8.707259</td>\n      <td>168.537116</td>\n      <td>2.164946</td>\n      <td>91.294864</td>\n      <td>7.141062</td>\n    </tr>\n    <tr>\n      <th>min</th>\n      <td>0.006320</td>\n      <td>0.000000</td>\n      <td>0.460000</td>\n      <td>0.000000</td>\n      <td>0.385000</td>\n      <td>3.561000</td>\n      <td>2.900000</td>\n      <td>1.129600</td>\n      <td>1.000000</td>\n      <td>187.000000</td>\n      <td>12.600000</td>\n      <td>0.320000</td>\n      <td>1.730000</td>\n    </tr>\n    <tr>\n      <th>25%</th>\n      <td>0.082045</td>\n      <td>0.000000</td>\n      <td>5.190000</td>\n      <td>0.000000</td>\n      <td>0.449000</td>\n      <td>5.885500</td>\n      <td>45.025000</td>\n      <td>2.100175</td>\n      <td>4.000000</td>\n      <td>279.000000</td>\n      <td>17.400000</td>\n      <td>375.377500</td>\n      <td>6.950000</td>\n    </tr>\n    <tr>\n      <th>50%</th>\n      <td>0.256510</td>\n      <td>0.000000</td>\n      <td>9.690000</td>\n      <td>0.000000</td>\n      <td>0.538000</td>\n      <td>6.208500</td>\n      <td>77.500000</td>\n      <td>3.207450</td>\n      <td>5.000000</td>\n      <td>330.000000</td>\n      <td>19.050000</td>\n      <td>391.440000</td>\n      <td>11.360000</td>\n    </tr>\n    <tr>\n      <th>75%</th>\n      <td>3.677083</td>\n      <td>12.500000</td>\n      <td>18.100000</td>\n      <td>0.000000</td>\n      <td>0.624000</td>\n      <td>6.623500</td>\n      <td>94.075000</td>\n      <td>5.188425</td>\n      <td>24.000000</td>\n      <td>666.000000</td>\n      <td>20.200000</td>\n      <td>396.225000</td>\n      <td>16.955000</td>\n    </tr>\n    <tr>\n      <th>max</th>\n      <td>88.976200</td>\n      <td>100.000000</td>\n      <td>27.740000</td>\n      <td>1.000000</td>\n      <td>0.871000</td>\n      <td>8.780000</td>\n      <td>100.000000</td>\n      <td>12.126500</td>\n      <td>24.000000</td>\n      <td>711.000000</td>\n      <td>22.000000</td>\n      <td>396.900000</td>\n      <td>37.970000</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "boston.describe() # 数据描述，可以查看每个每个变量的统计量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3 数据预处理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "归一化或者标准化首先在维数非常多的时候，可以防止某一维或某几维对数据影响过大，其次可以程序可以运行更快。方法很多，标准化，min-max,z-score,p范数等，具体怎么使用，要根据数据集的特征来选择。\n",
    "\n",
    "[延伸阅读-数据标准化的迷思之深度学习领域](https://zhuanlan.zhihu.com/p/81560511)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "               CRIM            ZN         INDUS          CHAS           NOX  \\\ncount  5.060000e+02  5.060000e+02  5.060000e+02  5.060000e+02  5.060000e+02   \nmean  -8.787437e-17 -6.343191e-16 -2.682911e-15  4.701992e-16  2.490322e-15   \nstd    1.000990e+00  1.000990e+00  1.000990e+00  1.000990e+00  1.000990e+00   \nmin   -4.197819e-01 -4.877224e-01 -1.557842e+00 -2.725986e-01 -1.465882e+00   \n25%   -4.109696e-01 -4.877224e-01 -8.676906e-01 -2.725986e-01 -9.130288e-01   \n50%   -3.906665e-01 -4.877224e-01 -2.110985e-01 -2.725986e-01 -1.442174e-01   \n75%    7.396560e-03  4.877224e-02  1.015999e+00 -2.725986e-01  5.986790e-01   \nmax    9.933931e+00  3.804234e+00  2.422565e+00  3.668398e+00  2.732346e+00   \n\n                 RM           AGE           DIS           RAD           TAX  \\\ncount  5.060000e+02  5.060000e+02  5.060000e+02  5.060000e+02  5.060000e+02   \nmean  -1.145230e-14 -1.407855e-15  9.210902e-16  5.441409e-16 -8.868619e-16   \nstd    1.000990e+00  1.000990e+00  1.000990e+00  1.000990e+00  1.000990e+00   \nmin   -3.880249e+00 -2.335437e+00 -1.267069e+00 -9.828429e-01 -1.313990e+00   \n25%   -5.686303e-01 -8.374480e-01 -8.056878e-01 -6.379618e-01 -7.675760e-01   \n50%   -1.084655e-01  3.173816e-01 -2.793234e-01 -5.230014e-01 -4.646726e-01   \n75%    4.827678e-01  9.067981e-01  6.623709e-01  1.661245e+00  1.530926e+00   \nmax    3.555044e+00  1.117494e+00  3.960518e+00  1.661245e+00  1.798194e+00   \n\n            PTRATIO             B         LSTAT  \ncount  5.060000e+02  5.060000e+02  5.060000e+02  \nmean  -9.205636e-15  8.163101e-15 -3.370163e-16  \nstd    1.000990e+00  1.000990e+00  1.000990e+00  \nmin   -2.707379e+00 -3.907193e+00 -1.531127e+00  \n25%   -4.880391e-01  2.050715e-01 -7.994200e-01  \n50%    2.748590e-01  3.811865e-01 -1.812536e-01  \n75%    8.065758e-01  4.336510e-01  6.030188e-01  \nmax    1.638828e+00  4.410519e-01  3.548771e+00  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>CRIM</th>\n      <th>ZN</th>\n      <th>INDUS</th>\n      <th>CHAS</th>\n      <th>NOX</th>\n      <th>RM</th>\n      <th>AGE</th>\n      <th>DIS</th>\n      <th>RAD</th>\n      <th>TAX</th>\n      <th>PTRATIO</th>\n      <th>B</th>\n      <th>LSTAT</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>count</th>\n      <td>5.060000e+02</td>\n      <td>5.060000e+02</td>\n      <td>5.060000e+02</td>\n      <td>5.060000e+02</td>\n      <td>5.060000e+02</td>\n      <td>5.060000e+02</td>\n      <td>5.060000e+02</td>\n      <td>5.060000e+02</td>\n      <td>5.060000e+02</td>\n      <td>5.060000e+02</td>\n      <td>5.060000e+02</td>\n      <td>5.060000e+02</td>\n      <td>5.060000e+02</td>\n    </tr>\n    <tr>\n      <th>mean</th>\n      <td>-8.787437e-17</td>\n      <td>-6.343191e-16</td>\n      <td>-2.682911e-15</td>\n      <td>4.701992e-16</td>\n      <td>2.490322e-15</td>\n      <td>-1.145230e-14</td>\n      <td>-1.407855e-15</td>\n      <td>9.210902e-16</td>\n      <td>5.441409e-16</td>\n      <td>-8.868619e-16</td>\n      <td>-9.205636e-15</td>\n      <td>8.163101e-15</td>\n      <td>-3.370163e-16</td>\n    </tr>\n    <tr>\n      <th>std</th>\n      <td>1.000990e+00</td>\n      <td>1.000990e+00</td>\n      <td>1.000990e+00</td>\n      <td>1.000990e+00</td>\n      <td>1.000990e+00</td>\n      <td>1.000990e+00</td>\n      <td>1.000990e+00</td>\n      <td>1.000990e+00</td>\n      <td>1.000990e+00</td>\n      <td>1.000990e+00</td>\n      <td>1.000990e+00</td>\n      <td>1.000990e+00</td>\n      <td>1.000990e+00</td>\n    </tr>\n    <tr>\n      <th>min</th>\n      <td>-4.197819e-01</td>\n      <td>-4.877224e-01</td>\n      <td>-1.557842e+00</td>\n      <td>-2.725986e-01</td>\n      <td>-1.465882e+00</td>\n      <td>-3.880249e+00</td>\n      <td>-2.335437e+00</td>\n      <td>-1.267069e+00</td>\n      <td>-9.828429e-01</td>\n      <td>-1.313990e+00</td>\n      <td>-2.707379e+00</td>\n      <td>-3.907193e+00</td>\n      <td>-1.531127e+00</td>\n    </tr>\n    <tr>\n      <th>25%</th>\n      <td>-4.109696e-01</td>\n      <td>-4.877224e-01</td>\n      <td>-8.676906e-01</td>\n      <td>-2.725986e-01</td>\n      <td>-9.130288e-01</td>\n      <td>-5.686303e-01</td>\n      <td>-8.374480e-01</td>\n      <td>-8.056878e-01</td>\n      <td>-6.379618e-01</td>\n      <td>-7.675760e-01</td>\n      <td>-4.880391e-01</td>\n      <td>2.050715e-01</td>\n      <td>-7.994200e-01</td>\n    </tr>\n    <tr>\n      <th>50%</th>\n      <td>-3.906665e-01</td>\n      <td>-4.877224e-01</td>\n      <td>-2.110985e-01</td>\n      <td>-2.725986e-01</td>\n      <td>-1.442174e-01</td>\n      <td>-1.084655e-01</td>\n      <td>3.173816e-01</td>\n      <td>-2.793234e-01</td>\n      <td>-5.230014e-01</td>\n      <td>-4.646726e-01</td>\n      <td>2.748590e-01</td>\n      <td>3.811865e-01</td>\n      <td>-1.812536e-01</td>\n    </tr>\n    <tr>\n      <th>75%</th>\n      <td>7.396560e-03</td>\n      <td>4.877224e-02</td>\n      <td>1.015999e+00</td>\n      <td>-2.725986e-01</td>\n      <td>5.986790e-01</td>\n      <td>4.827678e-01</td>\n      <td>9.067981e-01</td>\n      <td>6.623709e-01</td>\n      <td>1.661245e+00</td>\n      <td>1.530926e+00</td>\n      <td>8.065758e-01</td>\n      <td>4.336510e-01</td>\n      <td>6.030188e-01</td>\n    </tr>\n    <tr>\n      <th>max</th>\n      <td>9.933931e+00</td>\n      <td>3.804234e+00</td>\n      <td>2.422565e+00</td>\n      <td>3.668398e+00</td>\n      <td>2.732346e+00</td>\n      <td>3.555044e+00</td>\n      <td>1.117494e+00</td>\n      <td>3.960518e+00</td>\n      <td>1.661245e+00</td>\n      <td>1.798194e+00</td>\n      <td>1.638828e+00</td>\n      <td>4.410519e-01</td>\n      <td>3.548771e+00</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "Scale = StandardScaler() # z = (x - u) / s u为均值，s为标准差\n",
    "X = Scale.fit_transform(X) # 对于线性模型，一般需要做归一化或者标准化处理，否则会出现梯度爆炸，对于树模型一般不需要\n",
    "X = pd.DataFrame(X, columns = ['CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','PTRATIO','B','LSTAT'])\n",
    "X.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "         CRIM        ZN     INDUS      CHAS       NOX        RM       AGE  \\\n0   -0.419782  0.284830 -1.287909 -0.272599 -0.144217  0.413672 -0.120013   \n1   -0.417339 -0.487722 -0.593381 -0.272599 -0.740262  0.194274  0.367166   \n2   -0.417342 -0.487722 -0.593381 -0.272599 -0.740262  1.282714 -0.265812   \n3   -0.416750 -0.487722 -1.306878 -0.272599 -0.835284  1.016303 -0.809889   \n4   -0.412482 -0.487722 -1.306878 -0.272599 -0.835284  1.228577 -0.511180   \n..        ...       ...       ...       ...       ...       ...       ...   \n501 -0.413229 -0.487722  0.115738 -0.272599  0.158124  0.439316  0.018673   \n502 -0.415249 -0.487722  0.115738 -0.272599  0.158124 -0.234548  0.288933   \n503 -0.413447 -0.487722  0.115738 -0.272599  0.158124  0.984960  0.797449   \n504 -0.407764 -0.487722  0.115738 -0.272599  0.158124  0.725672  0.736996   \n505 -0.415000 -0.487722  0.115738 -0.272599  0.158124 -0.362767  0.434732   \n\n          DIS       RAD       TAX   PTRATIO         B     LSTAT  bias  \n0    0.140214 -0.982843 -0.666608 -1.459000  0.441052 -1.075562     1  \n1    0.557160 -0.867883 -0.987329 -0.303094  0.441052 -0.492439     1  \n2    0.557160 -0.867883 -0.987329 -0.303094  0.396427 -1.208727     1  \n3    1.077737 -0.752922 -1.106115  0.113032  0.416163 -1.361517     1  \n4    1.077737 -0.752922 -1.106115  0.113032  0.441052 -1.026501     1  \n..        ...       ...       ...       ...       ...       ...   ...  \n501 -0.625796 -0.982843 -0.803212  1.176466  0.387217 -0.418147     1  \n502 -0.716639 -0.982843 -0.803212  1.176466  0.441052 -0.500850     1  \n503 -0.773684 -0.982843 -0.803212  1.176466  0.441052 -0.983048     1  \n504 -0.668437 -0.982843 -0.803212  1.176466  0.403225 -0.865302     1  \n505 -0.613246 -0.982843 -0.803212  1.176466  0.441052 -0.669058     1  \n\n[506 rows x 14 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>CRIM</th>\n      <th>ZN</th>\n      <th>INDUS</th>\n      <th>CHAS</th>\n      <th>NOX</th>\n      <th>RM</th>\n      <th>AGE</th>\n      <th>DIS</th>\n      <th>RAD</th>\n      <th>TAX</th>\n      <th>PTRATIO</th>\n      <th>B</th>\n      <th>LSTAT</th>\n      <th>bias</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>-0.419782</td>\n      <td>0.284830</td>\n      <td>-1.287909</td>\n      <td>-0.272599</td>\n      <td>-0.144217</td>\n      <td>0.413672</td>\n      <td>-0.120013</td>\n      <td>0.140214</td>\n      <td>-0.982843</td>\n      <td>-0.666608</td>\n      <td>-1.459000</td>\n      <td>0.441052</td>\n      <td>-1.075562</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>-0.417339</td>\n      <td>-0.487722</td>\n      <td>-0.593381</td>\n      <td>-0.272599</td>\n      <td>-0.740262</td>\n      <td>0.194274</td>\n      <td>0.367166</td>\n      <td>0.557160</td>\n      <td>-0.867883</td>\n      <td>-0.987329</td>\n      <td>-0.303094</td>\n      <td>0.441052</td>\n      <td>-0.492439</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>-0.417342</td>\n      <td>-0.487722</td>\n      <td>-0.593381</td>\n      <td>-0.272599</td>\n      <td>-0.740262</td>\n      <td>1.282714</td>\n      <td>-0.265812</td>\n      <td>0.557160</td>\n      <td>-0.867883</td>\n      <td>-0.987329</td>\n      <td>-0.303094</td>\n      <td>0.396427</td>\n      <td>-1.208727</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>-0.416750</td>\n      <td>-0.487722</td>\n      <td>-1.306878</td>\n      <td>-0.272599</td>\n      <td>-0.835284</td>\n      <td>1.016303</td>\n      <td>-0.809889</td>\n      <td>1.077737</td>\n      <td>-0.752922</td>\n      <td>-1.106115</td>\n      <td>0.113032</td>\n      <td>0.416163</td>\n      <td>-1.361517</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>-0.412482</td>\n      <td>-0.487722</td>\n      <td>-1.306878</td>\n      <td>-0.272599</td>\n      <td>-0.835284</td>\n      <td>1.228577</td>\n      <td>-0.511180</td>\n      <td>1.077737</td>\n      <td>-0.752922</td>\n      <td>-1.106115</td>\n      <td>0.113032</td>\n      <td>0.441052</td>\n      <td>-1.026501</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>501</th>\n      <td>-0.413229</td>\n      <td>-0.487722</td>\n      <td>0.115738</td>\n      <td>-0.272599</td>\n      <td>0.158124</td>\n      <td>0.439316</td>\n      <td>0.018673</td>\n      <td>-0.625796</td>\n      <td>-0.982843</td>\n      <td>-0.803212</td>\n      <td>1.176466</td>\n      <td>0.387217</td>\n      <td>-0.418147</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>502</th>\n      <td>-0.415249</td>\n      <td>-0.487722</td>\n      <td>0.115738</td>\n      <td>-0.272599</td>\n      <td>0.158124</td>\n      <td>-0.234548</td>\n      <td>0.288933</td>\n      <td>-0.716639</td>\n      <td>-0.982843</td>\n      <td>-0.803212</td>\n      <td>1.176466</td>\n      <td>0.441052</td>\n      <td>-0.500850</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>503</th>\n      <td>-0.413447</td>\n      <td>-0.487722</td>\n      <td>0.115738</td>\n      <td>-0.272599</td>\n      <td>0.158124</td>\n      <td>0.984960</td>\n      <td>0.797449</td>\n      <td>-0.773684</td>\n      <td>-0.982843</td>\n      <td>-0.803212</td>\n      <td>1.176466</td>\n      <td>0.441052</td>\n      <td>-0.983048</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>504</th>\n      <td>-0.407764</td>\n      <td>-0.487722</td>\n      <td>0.115738</td>\n      <td>-0.272599</td>\n      <td>0.158124</td>\n      <td>0.725672</td>\n      <td>0.736996</td>\n      <td>-0.668437</td>\n      <td>-0.982843</td>\n      <td>-0.803212</td>\n      <td>1.176466</td>\n      <td>0.403225</td>\n      <td>-0.865302</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>505</th>\n      <td>-0.415000</td>\n      <td>-0.487722</td>\n      <td>0.115738</td>\n      <td>-0.272599</td>\n      <td>0.158124</td>\n      <td>-0.362767</td>\n      <td>0.434732</td>\n      <td>-0.613246</td>\n      <td>-0.982843</td>\n      <td>-0.803212</td>\n      <td>1.176466</td>\n      <td>0.441052</td>\n      <td>-0.669058</td>\n      <td>1</td>\n    </tr>\n  </tbody>\n</table>\n<p>506 rows × 14 columns</p>\n</div>"
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# y=Σwixi+b\n",
    "# 因为b的求导都为1，给数据添加一个偏置b并且设置为1，当做数据的某一个特征并且进行梯度更新 wi*b=wi\n",
    "X['bias']=1\n",
    "X"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "划分数据集，其中20%的数据用作测试集X_test,y_test,另外80%的数据用做训练集X_train,y_train，其中random_state为随机种子"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test , y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_train.shape,y_train.shape (404, 14) (404,)\n",
      "X_test.shape,y_test.shape (102, 14) (102,)\n"
     ]
    }
   ],
   "source": [
    "print(\"X_train.shape,y_train.shape\",X_train.shape,y_train.shape) # 打印数据条数\n",
    "print(\"X_test.shape,y_test.shape\",X_test.shape,y_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train = np.array(X_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型训练与梯度更新"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "def l1_cost(X, y, theta):\n",
    "    \"\"\"\n",
    "    X:特征\n",
    "    y：目标值\n",
    "    theta:模型参数\n",
    "    \"\"\"\n",
    "    k = X.shape[0]\n",
    "    total_cost = 0\n",
    "    for i in range(k):\n",
    "        total_cost += 1/k * np.abs(y[i]-theta.dot(X[i,:]))\n",
    "    return total_cost\n",
    "\n",
    "\n",
    "\n",
    "def l2_cost(X, y, theta):\n",
    "    k = X.shape[0]\n",
    "    total_cost = 0\n",
    "    for i in range(k):\n",
    "        total_cost += 1/k * (y[i]-theta.dot(X[i,:]))**2\n",
    "    return total_cost"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "(10,)"
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.zeros(10).shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "def step_l1_gradient(X, y, learning_rate, theta):\n",
    "    \"\"\"\n",
    "    计算MAE损失函数的梯度的函数\n",
    "    对于0处的不可微分点返回梯度值0\n",
    "    X:特征向量\n",
    "    y：目标值\n",
    "    learing_rate:学习率\n",
    "    theta:参数\n",
    "    \"\"\"\n",
    "    n = X.shape[0]\n",
    "#     print(n)\n",
    "    e = y - X @ theta\n",
    "    gradients = -(X.T @ np.sign(e)) / n # sign为符号函数\n",
    "    theta = theta - learning_rate * gradients\n",
    "    return theta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "def step_l2_gradient(X, y, learning_rate, theta):\n",
    "    k = X.shape[0]\n",
    "    n = X.shape[1]\n",
    "    gradients = np.zeros(n)\n",
    "    for i in range(k):\n",
    "        for j in range(n):\n",
    "            gradients[j] += (-2/k) * ( y[i] - (theta.dot(X[i,:])) ) * X[i,j]\n",
    "    theta = theta - learning_rate * gradients\n",
    "    return theta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "# def step_gradient(X, y, learning_rate, theta):\n",
    "#     \"\"\"\n",
    "#     X:特征向量\n",
    "#     y：目标值\n",
    "#     learing_rate:学习率\n",
    "#     theta:参数\n",
    "#     \"\"\"\n",
    "#     m_deriv = 0\n",
    "#     N = len(X)\n",
    "#     for i in range(N):\n",
    "#         # 计算偏导\n",
    "#         # -x(y - (mx + b)) / |mx + b|\n",
    "#         m_deriv += - X[i] * (y[i] - (theta*X[i] + b)) / abs(y[i] - (theta*X[i] + b))\n",
    "#     # We subtract because the derivatives point in direction of steepest ascent\n",
    "#     theta -= (m_deriv / float(N)) * learning_rate\n",
    "# #     theta = theta - learning_rate * gradients\n",
    "#     return theta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "def gradient_descent(X_train, y_train, learning_rate, iterations):\n",
    "    k = X_train.shape[0]\n",
    "    n = X_train.shape[1]\n",
    "    theta = np.zeros(n)# 初始化参数 \n",
    "    loss_values=[]\n",
    "#     print(theta.shape)\n",
    "    for i in range(iterations):\n",
    "        theta = step_l1_gradient(X_train, y_train, learning_rate, theta)\n",
    "        loss=l1_cost(X_train, y_train, theta)\n",
    "        loss_values.append(loss)\n",
    "        print(i, 'cost:', loss)\n",
    "    return theta,loss_values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 cost: 22.756180733143896\n",
      "1 cost: 22.71582681282243\n",
      "2 cost: 22.675472892500967\n",
      "3 cost: 22.63511897217951\n",
      "4 cost: 22.594765051858065\n",
      "5 cost: 22.55441113153661\n",
      "6 cost: 22.51405721121515\n",
      "7 cost: 22.47370329089367\n",
      "8 cost: 22.433349370572213\n",
      "9 cost: 22.39299545025078\n",
      "10 cost: 22.35264152992932\n",
      "11 cost: 22.31228760960784\n",
      "12 cost: 22.27193368928638\n",
      "13 cost: 22.23157976896493\n",
      "14 cost: 22.191225848643473\n",
      "15 cost: 22.150871928322054\n",
      "16 cost: 22.11051800800057\n",
      "17 cost: 22.070164087679103\n",
      "18 cost: 22.02981016735765\n",
      "19 cost: 21.98945624703621\n",
      "20 cost: 21.949102326714755\n",
      "21 cost: 21.908748406393304\n",
      "22 cost: 21.868394486071857\n",
      "23 cost: 21.828040565750353\n",
      "24 cost: 21.787686645428902\n",
      "25 cost: 21.747332725107476\n",
      "26 cost: 21.706978804785994\n",
      "27 cost: 21.666624884464554\n",
      "28 cost: 21.62627096414309\n",
      "29 cost: 21.585917043821627\n",
      "30 cost: 21.545563123500166\n",
      "31 cost: 21.505209203178705\n",
      "32 cost: 21.464855282857254\n",
      "33 cost: 21.424501362535818\n",
      "34 cost: 21.384147442214335\n",
      "35 cost: 21.343793521892916\n",
      "36 cost: 21.303439601571412\n",
      "37 cost: 21.26308568124995\n",
      "38 cost: 21.222731760928504\n",
      "39 cost: 21.182377840607057\n",
      "40 cost: 21.142023920285585\n",
      "41 cost: 21.10166999996414\n",
      "42 cost: 21.061316079642683\n",
      "43 cost: 21.020962159321222\n",
      "44 cost: 20.980608238999753\n",
      "45 cost: 20.940254318678303\n",
      "46 cost: 20.899900398356863\n",
      "47 cost: 20.85954647803539\n",
      "48 cost: 20.81919255771394\n",
      "49 cost: 20.77883863739249\n",
      "50 cost: 20.73848471707103\n",
      "51 cost: 20.698130796749567\n",
      "52 cost: 20.657776876428123\n",
      "53 cost: 20.617422956106665\n",
      "54 cost: 20.57706903578519\n",
      "55 cost: 20.53671511546376\n",
      "56 cost: 20.49636119514229\n",
      "57 cost: 20.456007274820827\n",
      "58 cost: 20.415653354499362\n",
      "59 cost: 20.375299434177908\n",
      "60 cost: 20.334945513856457\n",
      "61 cost: 20.294591593534978\n",
      "62 cost: 20.254237673213517\n",
      "63 cost: 20.213883752892055\n",
      "64 cost: 20.17352983257062\n",
      "65 cost: 20.133175912249158\n",
      "66 cost: 20.09282199192772\n",
      "67 cost: 20.05246807160626\n",
      "68 cost: 20.012114151284788\n",
      "69 cost: 19.971760230963326\n",
      "70 cost: 19.931406310641872\n",
      "71 cost: 19.89105239032042\n",
      "72 cost: 19.85069846999896\n",
      "73 cost: 19.810344549677495\n",
      "74 cost: 19.769990629356062\n",
      "75 cost: 19.72963670903458\n",
      "76 cost: 19.68928278871314\n",
      "77 cost: 19.648928868391657\n",
      "78 cost: 19.60857494807022\n",
      "79 cost: 19.568221027748763\n",
      "80 cost: 19.52786710742731\n",
      "81 cost: 19.487513187105826\n",
      "82 cost: 19.44715926678441\n",
      "83 cost: 19.406805346462928\n",
      "84 cost: 19.366451426141484\n",
      "85 cost: 19.326097505820016\n",
      "86 cost: 19.28574358549856\n",
      "87 cost: 19.24538966517709\n",
      "88 cost: 19.205035744855646\n",
      "89 cost: 19.16468182453418\n",
      "90 cost: 19.12432790421273\n",
      "91 cost: 19.083973983891266\n",
      "92 cost: 19.04362006356983\n",
      "93 cost: 19.003266143248354\n",
      "94 cost: 18.962912222926892\n",
      "95 cost: 18.922558302605445\n",
      "96 cost: 18.882204382283994\n",
      "97 cost: 18.84185046196252\n",
      "98 cost: 18.801496541641058\n",
      "99 cost: 18.761142621319618\n",
      "100 cost: 18.72078870099814\n",
      "101 cost: 18.680434780676713\n",
      "102 cost: 18.64008086035526\n",
      "103 cost: 18.59972694003375\n",
      "104 cost: 18.559373019712325\n",
      "105 cost: 18.51901909939087\n",
      "106 cost: 18.478665179069413\n",
      "107 cost: 18.438311258747966\n",
      "108 cost: 18.397957338426508\n",
      "109 cost: 18.357603418105032\n",
      "110 cost: 18.317249497783553\n",
      "111 cost: 18.276895577462128\n",
      "112 cost: 18.236541657140684\n",
      "113 cost: 18.196187736819205\n",
      "114 cost: 18.15583381649776\n",
      "115 cost: 18.1154798961763\n",
      "116 cost: 18.075125975854835\n",
      "117 cost: 18.034772055533377\n",
      "118 cost: 17.99441813521191\n",
      "119 cost: 17.95406421489047\n",
      "120 cost: 17.913710294568986\n",
      "121 cost: 17.87335637424756\n",
      "122 cost: 17.833002453926095\n",
      "123 cost: 17.792648533604627\n",
      "124 cost: 17.752294613283173\n",
      "125 cost: 17.71194069296172\n",
      "126 cost: 17.671586772640257\n",
      "127 cost: 17.631232852318803\n",
      "128 cost: 17.59087893199735\n",
      "129 cost: 17.55052501167589\n",
      "130 cost: 17.51017109135443\n",
      "131 cost: 17.469817171032975\n",
      "132 cost: 17.4294632507115\n",
      "133 cost: 17.389109330390074\n",
      "134 cost: 17.34875541006861\n",
      "135 cost: 17.30840148974714\n",
      "136 cost: 17.268047569425672\n",
      "137 cost: 17.22769364910424\n",
      "138 cost: 17.187339728782785\n",
      "139 cost: 17.146985808461313\n",
      "140 cost: 17.106631888139866\n",
      "141 cost: 17.06627796781841\n",
      "142 cost: 17.025924047496932\n",
      "143 cost: 16.985570127175485\n",
      "144 cost: 16.945216206854028\n",
      "145 cost: 16.904862286532556\n",
      "146 cost: 16.864508366211112\n",
      "147 cost: 16.82415444588967\n",
      "148 cost: 16.7838005255682\n",
      "149 cost: 16.743446605246742\n",
      "150 cost: 16.703092684925284\n",
      "151 cost: 16.662738764603827\n",
      "152 cost: 16.622384844282372\n",
      "153 cost: 16.582030923960907\n",
      "154 cost: 16.541677003639457\n",
      "155 cost: 16.501323083317992\n",
      "156 cost: 16.46096916299654\n",
      "157 cost: 16.42061524267508\n",
      "158 cost: 16.38026132235363\n",
      "159 cost: 16.339907402032175\n",
      "160 cost: 16.299553481710713\n",
      "161 cost: 16.25920474629833\n",
      "162 cost: 16.219086899741118\n",
      "163 cost: 16.1789690531839\n",
      "164 cost: 16.13885120662667\n",
      "165 cost: 16.098733360069453\n",
      "166 cost: 16.058615513512237\n",
      "167 cost: 16.018497666955017\n",
      "168 cost: 15.978379820397805\n",
      "169 cost: 15.938261973840584\n",
      "170 cost: 15.898144127283363\n",
      "171 cost: 15.858026280726136\n",
      "172 cost: 15.817908434168922\n",
      "173 cost: 15.777790587611706\n",
      "174 cost: 15.737672741054496\n",
      "175 cost: 15.697554894497259\n",
      "176 cost: 15.657437047940064\n",
      "177 cost: 15.617319201382827\n",
      "178 cost: 15.577201354825608\n",
      "179 cost: 15.537083508268392\n",
      "180 cost: 15.49696566171119\n",
      "181 cost: 15.456847815153953\n",
      "182 cost: 15.416729968596737\n",
      "183 cost: 15.37661212203952\n",
      "184 cost: 15.336541025574157\n",
      "185 cost: 15.296643096384486\n",
      "186 cost: 15.2567451671948\n",
      "187 cost: 15.216847238005112\n",
      "188 cost: 15.176949308815445\n",
      "189 cost: 15.13705137962575\n",
      "190 cost: 15.097153450436052\n",
      "191 cost: 15.057255521246375\n",
      "192 cost: 15.017357592056705\n",
      "193 cost: 14.977459662867004\n",
      "194 cost: 14.937561733677319\n",
      "195 cost: 14.897663804487639\n",
      "196 cost: 14.857765875297952\n",
      "197 cost: 14.817867946108255\n",
      "198 cost: 14.777970016918573\n",
      "199 cost: 14.738072087728888\n",
      "200 cost: 14.698174158539212\n",
      "201 cost: 14.658276229349521\n",
      "202 cost: 14.618378300159844\n",
      "203 cost: 14.57848037097015\n",
      "204 cost: 14.538582441780465\n",
      "205 cost: 14.49868451259079\n",
      "206 cost: 14.458786583401094\n",
      "207 cost: 14.418888654211411\n",
      "208 cost: 14.378990725021728\n",
      "209 cost: 14.33909279583204\n",
      "210 cost: 14.299194866642361\n",
      "211 cost: 14.259296937452685\n",
      "212 cost: 14.219399008262972\n",
      "213 cost: 14.179501079073303\n",
      "214 cost: 14.139603149883632\n",
      "215 cost: 14.099705220693924\n",
      "216 cost: 14.059807291504258\n",
      "217 cost: 14.01990941130071\n",
      "218 cost: 13.980220603565916\n",
      "219 cost: 13.94053179583113\n",
      "220 cost: 13.900842988096361\n",
      "221 cost: 13.861154180361577\n",
      "222 cost: 13.821465372626777\n",
      "223 cost: 13.781776564892017\n",
      "224 cost: 13.742087757157226\n",
      "225 cost: 13.702398949422454\n",
      "226 cost: 13.662710141687665\n",
      "227 cost: 13.623021333952888\n",
      "228 cost: 13.583332526218097\n",
      "229 cost: 13.543643718483333\n",
      "230 cost: 13.503954910748547\n",
      "231 cost: 13.464266103013747\n",
      "232 cost: 13.424577295278981\n",
      "233 cost: 13.384910814524025\n",
      "234 cost: 13.34561457376404\n",
      "235 cost: 13.306318333004036\n",
      "236 cost: 13.267022092244053\n",
      "237 cost: 13.227725851484067\n",
      "238 cost: 13.188429610724087\n",
      "239 cost: 13.149133369964078\n",
      "240 cost: 13.109837129204106\n",
      "241 cost: 13.07054088844412\n",
      "242 cost: 13.031244647684115\n",
      "243 cost: 12.99194840692413\n",
      "244 cost: 12.952652166164132\n",
      "245 cost: 12.913355925404147\n",
      "246 cost: 12.874059684644164\n",
      "247 cost: 12.834763443884162\n",
      "248 cost: 12.795467203124177\n",
      "249 cost: 12.756170962364184\n",
      "250 cost: 12.716923140093495\n",
      "251 cost: 12.677706482791756\n",
      "252 cost: 12.638489825490002\n",
      "253 cost: 12.59927316818827\n",
      "254 cost: 12.560056510886525\n",
      "255 cost: 12.520839853584766\n",
      "256 cost: 12.481623196283032\n",
      "257 cost: 12.442406538981274\n",
      "258 cost: 12.40318988167953\n",
      "259 cost: 12.36397322437778\n",
      "260 cost: 12.324756567076047\n",
      "261 cost: 12.28553990977429\n",
      "262 cost: 12.246323252472552\n",
      "263 cost: 12.207106595170806\n",
      "264 cost: 12.167889937869049\n",
      "265 cost: 12.12867328056732\n",
      "266 cost: 12.089456623265564\n",
      "267 cost: 12.050239965963819\n",
      "268 cost: 12.011023308662068\n",
      "269 cost: 11.971806651360327\n",
      "270 cost: 11.932589994058581\n",
      "271 cost: 11.893373336756836\n",
      "272 cost: 11.854156679455091\n",
      "273 cost: 11.81494002215335\n",
      "274 cost: 11.775723364851606\n",
      "275 cost: 11.736506707549845\n",
      "276 cost: 11.697290050248109\n",
      "277 cost: 11.658073392946347\n",
      "278 cost: 11.618856735644602\n",
      "279 cost: 11.579640078342864\n",
      "280 cost: 11.540423421041124\n",
      "281 cost: 11.501206763739383\n",
      "282 cost: 11.461990106437627\n",
      "283 cost: 11.422773449135887\n",
      "284 cost: 11.383556791834136\n",
      "285 cost: 11.34434013453238\n",
      "286 cost: 11.305145774449043\n",
      "287 cost: 11.266020764093119\n",
      "288 cost: 11.226895753737187\n",
      "289 cost: 11.187770743381256\n",
      "290 cost: 11.148645733025306\n",
      "291 cost: 11.109520722669387\n",
      "292 cost: 11.070395712313456\n",
      "293 cost: 11.031270701957517\n",
      "294 cost: 10.992145691601594\n",
      "295 cost: 10.95302068124566\n",
      "296 cost: 10.913895670889724\n",
      "297 cost: 10.874770660533784\n",
      "298 cost: 10.835645650177868\n",
      "299 cost: 10.796520639821924\n"
     ]
    }
   ],
   "source": [
    "# 训练参数\n",
    "learning_rate = 0.04 # 学习率\n",
    "iterations = 300 # 迭代次数\n",
    "theta ,loss_values= gradient_descent(X_train, y_train, learning_rate, iterations)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "name": "pycharm-a2eace9b",
   "language": "python",
   "display_name": "PyCharm (neuralnrtwork)"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}